본문 바로가기

Homo Faber/Idioms

(8)
enum 의 내용을 공통으로 사용하는 방법 enum 객체는 상속이 되지 않기 때문에 공통된 부분을 상속을 사용해서 사용하지 못한다. 대신에 인터페이스와 static 오퍼레이션을 사용한다면 이와 유사하게 재사용할 수 있다. 예를 들어, 특정 코드값을 갖는 enum을 선언시 다음과 같이 사용할 수 있다. public class CodeTest { private interface Codable { String getCode(); } private static E from( E[] values, String code) { for (E e : values) if (e.getCode().equals(code)) return e; throw new IllegalArgumentException("Boring: " + code); } enum Gender imp..
소프트웨어 공학의 진실과 허위 1. 관리 진실 1. 소프트웨어 작업에서 가장 중요한 요소는 프로그래머들이 사용하는 도구나 기술이 아닌 프로그래머들 자신들의 자질(quality)이다. 진실 2. "개인차" 조사에 따르면, 최고의 프로그래머는 최악의 프로그래머보다 28배나 생산성이 높다. 이들의 연봉이 결코 그만큼 받지 못한다는 사실로 미루어봐서 소프트웨어 분야에서 이들은 大 바겐세일용이다. 진실 3. 지연된 프로젝트에 사람을 투입하는 것은 프로젝트를 더 지연되게 만든다. 진실 4. 작업 환경은 생산성과 제품 품질에 깊은 영향을 준다. 진실 5. 과대 선전은 소프트웨어 업계에서 전염병이다. 대부분의 소프트웨어 도구와 기법들은 생산성과 품질에 있어서 약 5내지 35 퍼센트 가량 향상시켜준다. 하지만, 어느 시점이건 대부분의 그러한 향상성은..
가벼운 클래스 다음의 패턴은 Hibernate에서 예전이나 지금이나 여전히 보편적이지만, Hibernate3 에서 이 문제를 해결하는 다른 방법이 있다. 다음과 같은 저장 클래스를 가지고 있다고 가정하자. public class Document implements Node { private Long _key; private String _name; private Calendar _created; private Calendar _updated; private Folder _folder; private Clob _text; public String getKey() { return _key; } public void setKey(Long key) { _key = key; } public String getName() { r..
Spring에서 annotation 태그 사용하기 (3) CustomerAutowireConfigurer CustomerAutowireConfigurer는 자동엮음(autowiring) 프로세스를 수정하여 만들 수 있게 하는 BeanFactoryPostProcessor이다. 특히, 만들어진 qualifier annotation 유형이 Spring의 @Qualifier annotation을 사용하지 않는다고 하더라도 등록이 가능하다. example.CustomQualifier 어플리케이션 컨텍스트에 대해 활성화되는 AutowireCadidateResolver의 특별한 구현체는 자바 버전에 달려있음을 유의하라. 만일 자바 5 이전에서 실행한다면 qualifier annotation은 지원이 안되며, 자동엮음 대상 후보들은 각각의 빈 정의의 'autowire-can..
Spring에서 annotation 태그 사용하기 (2) Qualifier를 사용하는 annotation 기반 자동엮음(autowiring) 세부 조정 타입에 의한 자동엮음(autowiring)은 여러개의 빈이 엮여질 수 있기 때문에 선택 과정에 대해서 좀 더 제어를 할 필요가 종종 있다. 이를 하기 위한 한가지 방법은 Spring의 @Qualifier annotation을 사용하는 것이다. 가장 단순한 경우, annotation 내의 빈 이름을 써서 byName 자동엮음을 할 수 있다. public class MovieRecommender { @Autowired @Qualifier("mainCatalog") private MovieCatalog movieCatalog; // ... } @Qualifier annotation은 또한 개개의 생성자 인자나 메소드..
Spring에서 annotation 태그 사용하기 (1) - @Autowired annotation과 같이 BeanPostProcessor를 사용하는 RequiredAnnotationBeanProcessor는 Spring의 IoC 컨테이너를 확장하는 보편적인 방법이다. 예를 들어, Spring 2.0은 @Required annotation을 사용해서 강제적으로 엮여야(wired) 되는 속성에 대해서 소개하고 있다. Spring 2.5 에서도 동일하게 Spring의 의존성 주입(dependency injection)을 위해서 동일한 일반적인 방법으로 사용할 수 있다. 근본적으로 @Autowired annotation은 autowiring과 동일한 기능을 제공하지만 세밀하게 조절이 가능하고 더 넓게 적용이 가능하다. Spring 2.5는 또한 @Resource, @PostConstruc..
Hibernate 테스팅 - Unitils 사용하기 Hibernate의 최대 장점은 아마도 어떠한 DB를 사용하더라도 코드의 변화가 적다는 것이다. 따라서, 테스팅에서도 실제 DB를 사용하지 않더라도 코딩이 가능하다. 여기서는 Hibernate와 Spring을 사용해서 테스팅 하는 예제를 설명하겠다. (도메인 모델은 이전에 설명한 일대다 관계의 예제) Spring Framework에서는 ORM과 관련된 Support 클래스를 제공하고 있는데, Hibernate 3에 대해서는 org.springframework.orm.hibernate3.support.HibernateDaoSupport 와 같은 지원 클래스를 제공한다. 우선, 데이터 리소스를 접근하는 인터페이스를 다음과 같이 정의할 수 있다. public interface SaveRepository { b..
Hibernate3 사용시 Join 테이블에 FK 이외의 컬럼이 있는 경우 매핑 ORM을 사용하다 보면 항상 겪는 문제지만, 다대다(many-to-many) 관계를 객체와 어떻게 매핑할 것인가이다. 물론, 객체 입장에서는 두 객체간의 Collection 문제지만, DB 입장에서는 항상 Join 테이블이 끼어 있어서 이를 해결하기간 웬만해서는 쉽지 않다. Hibernate3는 EJB3의 JPA(Java Persistence API)의 구현체로 이에 대한 문제를 다음과 같이 해결하고 있다. 위의 그림과 같이 Category에 Item을 추가할 때마다 어떤 정보가 필요하다고 가정하자. 위의 구조를 자바 클래스에 매핑하는 데에 두가지 방법이 있다. 첫번째 방법은 join 테이블에 대한 중간의 entity 클래스를 사용하여 일대다(one-to-many) 관계로 매핑하는 것이다. 두번째 방법은..

반응형