프로그래밍

    Bootstrap에서 tr td th 가로 사이즈 조정하기

    Bootstrap에서 tr td th 가로 사이즈 조정하기

    https://stackoverflow.com/questions/15115052/bootstrap-how-to-set-up-fixed-width-for-td StackOverflow에 100점짜리 답변이 있다.

    Mybatis 다중 매개변수 중 객체(오브젝트) 변수 넘기기

    일반객체를 @Param으로 보내는 방법은 다른 블로그나 검색을 통해서도 쉽게 정보를 구할 수 있는데 매개변수 여러개 중 오브젝트 변수 또는 객체 변수가 포함되어 있을 때는 나오질 않아서 그 방법을 적습니다. String select(@Param("obj")Object object); 1. 오브젝트 1개 오브젝트문이 하나라면 그냥 그 안의 변수들을 사용하면 됩니다. 예를들어 object 안에 attribute1 attirbuete2 변수가 포함되어 있다면 get에서 설정한 이름 대로 그냥 사용하시면 됩니다."select * from thistable where id = #{attributename1} and pw = #{attributename2}"이런 식으로 말이죠. 2. 오브젝트 객체와 다른 변수Str..

    이펙티브 자바 규칙 21 - 전략을 표현하고 싶을 때는 함수 객체를 사용해라

    프로그래밍 언어들 중에는 특정 함수를 호출할 수 있는 언어들이 있습니다. C같은 경우에는 포인터를 이용해서, 대리자(delegate), 자바도 사용할 수 있는 람다 표현식이 있죠. 전략을 표현하는데에 포인터가 좋은 방법이 될 수 있지만 자바는 포인터를 지원하지 않습니다. 자바는 어떤 경우라도 주소값을 직접 건드리지 못하게 하죠. 하지만 비슷한 메소드를 사용할 수 있습니다. 함수 객체(function object)라고 하는 방법입니다. public class StringLengthComparator { public int compare(String s1, String s2) { return s1.length() - s2.length(); } }이 코드는 문자열을 비교하여 차이를 계산해주는 전략을 가지고 있..

    이펙티브 자바 규칙 20 - 태그가 달린 클래스 대신 클래스 계층을 활용하라

    태그가 달린 클래스라는 것이 있습니다. 두가지 이상의 기능을 커버하는 클래스인데 아래 예제를 보죠. class Figure { enum Shape { RECTANGLE, CIRCLE }; final Shape shape; double length; double width; double radius; Figure(double radius) { shape = Shape.CIRCLE; this.radius = radius; } Figure(double length, double width) { shape = Shape.RECTANGLE; this.length = length; this.width = width; } double area() { switch (shape) { case RECTANGLE: retu..

    SpringFramework - ProxyFactoryBean 예제로 알아보기

    SpringFramework - ProxyFactoryBean 예제로 알아보기

    이전에 InvocationHandler 를 사용한 프록시 패턴과 팩토리 빈을 포스트 한 적이 있습니다. 저 위의 내용을 모르신다면 읽으셔야 이 포스트 내용이 이해가 가능합니다. Spring에서는 이 두 개를 단점을 보완하고 장점을 살려 두 개를 동시에 지원해 줄 ProxyFactoryBean이라는 클래스가 있습니다. 먼저 InvocationHandler를 대체할 MethodInterceptor를 설명할까요. InvocationHandler는 MethodInterceptor와 비슷하지만 한가지 다른 점이 있습니다. InvocationHandler는 아래와 같이 String plus2 = (String) method.invoke(target, args); invoke 메소드가 타겟 함수에 대한 정보를 가지고..

    SpringFramework(스프링) - 팩토리 빈(FactoryBean)

    SpringFramework(스프링) - 팩토리 빈(FactoryBean)

    스프링에서는 빈으로 관리할 수 없는 몇몇 객체들을 빈으로 활용할 수 있게끔 하기 위해 FactoryBean 기능을 제공하고 있습니다. 말 그대로 Bean을 뽑아내는 공장역할을 하는 클래스이죠. 예제코드로 살펴봅시다. 구성은 이러합니다 express 라는 메시지를 담고있는 객체를 FactoryBean에서 뽑아내며 xml은 Spring의 주입에 필요한 설정을 해주는 파일이고 Test는 테스트 클래스입니다. 위에서부터 볼까요public class express { String express; private express(String express) { this.express = express; } public String getExpress() { return express; } public static ex..

    이펙티브 자바 규칙 19 - 인터페이스는 자료형을 정의할 때만 사용하라

    인터페이스는 해당 클래스의 객체를 참조 할 수 있는 자료형(type)의 역할을 합니다. 인터페이스를 구현하면 int, string 등의 자료형을 그대로 오버라이드 하게되는데 이 목적을 위해 언터페이스를 사용하죠. 하지만 개중에는 그렇지 않은 인터페이스도 있습니다. public Interface PhysicalConstants { // 아보가르도 수(1/mol) static final double AVOGADROS_NUMBER = 6.02214199e23; // 볼쯔만 상수(J/K) static final double BOLTZMANN_CONSTANT = 1.3806503e-23; // 전자 질량(kg) static final double ELECTRON_MASS = 9.10938188e-31; } 이는 ..

    이펙티브 자바 규칙 18 - 추상 클래스 대신 인터페이스를 사용하자

    이펙티브 자바 규칙 18 - 추상 클래스 대신 인터페이스를 사용하자

    자바에는 여러 구현을 허용하는 자료형을 만드는 방법이 두가지 있습니다. 추상형 클래스와 인터페이스입니다. 이 두가지의 차이점은 추상클래스는 구현된 메소드를 포함할 수 있지만, 인터페이스는 아니라는 점입니다... 는 점이었지만 자바 1.8부터 default 를 활용하여 언터페이스도 body를 가질 수 있게 되었습니다! public interface Test { public void existingMethod(); default public void newDefaultMethod() { System.out.println("New default method is added in interface"); } }덕분에 우리는 공부할 게 늘었습니다. 추상형 클래스는 구현하려면 상속(계승)을 써야합니다. 자바에서는 멀..

    이펙티브 자바 규칙 17 - 계승을 위한 문서를 갖추거나, 그럴 수 없다면 금지하자

    이펙티브 자바 규칙 17 - 계승을 위한 문서를 갖추거나, 그럴 수 없다면 금지하자

    저번 포스트에서는 계승(상속)의 위험성을 설명하면서 구성의 디자인 패턴을 설명했습니다. 이번엔 EFJ에서는 상속의 위험성을 다루고 있습니다. 저번의 포스트에서 본 바와 같이 상속은 캡슐화를 깨뜨릴 수 있는 위험을 내포하고 있는 기능입니다. 때문에 오버라이드 등을 사용할 때 주의가 필요합니다. 1. 메소드를 재정의 할 때는 무슨 일이 발생하는지 정확하게 문서로 남겨야 한다. /** * {@inheritDoc} * * This implementation iterates over the collection looking for the * specified element. If it finds the element, it removes the element * from the collection using th..

    이펙티브 자바 규칙 16 - 계승하는 대신 구성하라

    이펙티브 자바 규칙 16 - 계승하는 대신 구성하라

    자바를 하는 사람은 상속(계승)을 모를 수가 없죠. 코드의 재사용을 돕는 강력한 도구입니다. 하지만 상속을 적절하게 사용하지 못한 소프트웨어는 깨지기 쉬운데요. 그래서 상속에는 그에 걸맞는 문서가 있는 것이 안전합니다. 이펙티브 자바에서는 먼저 상속의 단점을 나열하고 있습니다. 먼저 메소드와 달리 상속은 캡슐화 원칙을 위반합니다. 상위 클래스를 상속한 하위클래스는 상위클래스에 의존적입니다. 상위 클래스가 수정되면, 하위 클래스의 코드도 필연적으로 수정되어야 하죠. 캡슐화의 조건을 깨뜨리고 있습니다. 예제 코드로 한번 살펴봅시다. package dao; import java.util.Collection; import java.util.HashSet; public class InstrumentedHashSe..