본문 바로가기

전체 글333

이펙티브 자바 - 정적 팩토리 메소드 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - 정적 팩토리 메소드 객체를 생성하는 일반적인 방법은 public 생성자를 이용하는것이다. 하지만 정적 팩토리 메소드를 이용할 수도 있다. Boolean 의 valueOf 메소드는 기본 타입의 boolean 을 Boolean 객체 참조로 변환한다. public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 흔히 정적 팩토리 메소드를 디자인 패턴의 팩토리 메소드와 혼동한다. 디자인 패턴의 팩토리 메소드는 하나의 환경변수나 다른 변수를 (팩토리)만 변경하면 제품군들도 일괄적으로 변경되어 생성되도록 하는 패턴이다. 예를 들어 객체 RadioA1과 .. 2021. 9. 5.
객체지향의 사실과 오해 - 개념, 명세, 구현 - 이 글은 조영호의 객체지향의 사실과 오해를 기반으로 작성되었습니다. (가능하면 꼭 읽어보는것을 추천드립니다.) - 개념, 명세, 구현 UML 관련 서적중 마틴 파울러의 UML Distilled 2판 에서는 객체 지향 설계를 개념 관점, 명세 관점, 구현 관점으로 구분한다. 우선 개념 관점은 도메인안에 존재하는 개념과 개념간의 관계를 나타낸것이다. 도메인은 앞에서 말했듯이 사용자가 관심을 가지는 분야를 의미한다. 이 관점에서는 실제 도메인의 규칙을 최대한 유사하게 반영하는것이 핵심이다. 명세 관점부터는 소프트웨어의 세계로 넘어온다. 명세 관점에서는 What/Who 사이클에서 What 에 해당하는 무엇에 초점을 맞추어서 객체의 인터페이스에 해당하는 관점에 집중한다. 구현 관점은 우리와 같은 프로그래머가 .. 2021. 8. 29.
객체지향의 사실과 오해 - 기능과 구조의 통합 - 이 글은 조영호의 객체지향의 사실과 오해를 기반으로 작성되었습니다. (가능하면 꼭 읽어보는것을 추천드립니다.) - 도메인 모델, 유스케이스 그리고 책임-주도 설계 시스템이라는 것은 사용자가 첫번째로 만나게 되는 객체이다. 사용자 입장에서 시스템은 자신과의 협력에서 자신의 요청을 처리하는 하나의 객체로 볼 수 있다. 시스템은 자신안에 더 작은 객체들을 갖고 있으며, 사용자로부터 받은 책임을 더 작은 객체들로 적절하게 분배해야 한다. 여기에서 책임-주도 설계가 등장한다. 유스케이스는 사용자에게 제공할 기능을 시스템의 책임으로 볼 수 있게 한다. 즉 사용자로 부터 처음으로 메시지를 수신하는 출발점의 역할을 한다. 그 이후에는 시스템이 안정적인 도메인 모델에 기반하여 기능을 수용하고 객체들로 책임을 분배한다.. 2021. 8. 28.
JPA - 객체지향 쿼리 언어 - 네이티브 SQL - 참조: 자바 ORM 표준 JPA 프로그래밍 - fieldResult 명세: https://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/FieldResult.html - 네이티브 SQL 여태까지 많은 JPQL 의 기능들을 살펴보았다. 대부분의 표준 SQL 의 문법과 함수들을 지원하지만 특정 상황에서는 어쩔 수 없이 DB 제품군에 따른 특화된 기능을 사용해야할 때가 있다. (ex - 특정 함수, 문법, SQL 힌트, 인라인 뷰, 스토어드 프로시져...) JPA 는 이런 상황에 대비해 SQL 을 직접 사용할 수 있는 기능을 제공하는데 이를 네이티브 SQL 이라고 한다. 네이티브 SQL 을 사용할거면 JPA 를 굳이 사용하지 않아도 될텐데 왜 JPA 의 .. 2021. 8. 27.
객체지향의 사실과 오해 - 기능 - 이 글은 조영호의 객체지향의 사실과 오해를 기반으로 작성되었습니다. (가능하면 꼭 읽어보는것을 추천드립니다.) - 유스케이스 기능적 요구사항이라는 말을 들어본적이 있을것이다. 기능적 요구사항이란 시스템이 사용자에게 제공해야하는 기능의 목록이다. 시스템은 사용자의 목표를 달성하기 위해 기능들을 제공하는데 사용자가 시스템에 작업을 요청하고 시스템은 이 요청을 처리하여 응답한다. 이러한 과정은 사용자가 목표를 이루거나 에러가날 때까지 계속된다. 유스케이스는 사용자의 목표 달성을 위해 사용자와 시스템간의 상호작용의 흐름을 텍스트로 정리한것이다. 시스템이 제공해야 하는 기능 목록을 모두 만족하면 사용자의 목표를 이룰 수 있는데 왜 굳이 유스케이스 라는 것을 따로 작성해야 하는가? 시스템이 제공해야하는 기능 목.. 2021. 8. 27.
JPA - 객체지향 쿼리 언어 - QueryDSL 메소드 위임 - 참조: 자바 ORM 표준 JPA 프로그래밍 - 메소드 위임 메소드 위임을 사용하면 쿼리 타입에 검색 조건을 직접 정의할 수 있다. public class MemberExpression { @QueryDelegate(Member.class) public static BooleanExpression isAdult(QMember member) { return member.age.gt(19); } } Member 엔티티가 성인인지를 판단하는 검색조건을 추가해본다고 가정하자. 메소드 위임 기능을 사용하려면 static 메소드를 만들고 @QueryDelegate 어노테이션을 지정한다. 어노테이션 인자에는 해당 기능을 적용할 엔티티를 설정한다. 메소드의 첫번째 파라미터에는 Q-type 을 지정하고 나머지는 필요한.. 2021. 8. 26.