본문 바로가기

JAVA4

컴포지션(Composition) 객체지향 언어의 특징 중의 하나는 '상속'이다. 여기서 말하는 상속이란 클래스 B가 다른 클래스 A를 확장(Extends)하는 것. 즉, 인터페이스가 다른 인터페이스를 확장하거나 클래스가 인터페이스를 구현하는 것과는 다른 의미이다. 애초에 인터페이스 상속은 구현(Implements)이라는 별도의 keyword를 사용하기도 하고.. 쨋든 상속의 내재된 위험성과 그 것을 피해갈 수 있는 구성(Composition)에 대해 정리해보자. 여러 객체의 공통되는 부분을 상위 클래스로 정의하고, 하위 클래스에서는 그 것을 확장하고 구현한다. 당연한 소리다. 확장할 목적으로 설계되고, 문서화도 잘 되어있는 클래스는 상속을 통해서 클래스 계층을 구성하며 개인적으로 내가 객체지향언어를 좋아하는 이유다. 하지만.. 패키지의.. 2019. 4. 28.
싱글톤 요즘 전 포스팅에서 언급한 sns 로그인을 계속 진행하고 있다.(아직도...) 우리 사이트는 회원가입이 발생하는 곳이 총 4군데기에(프로모터, 일반회원 etc..) 4곳의 비지니스 로직에서 활용할 수 있는 공통 유효성 검증 라이브러리가 필요했다. 막상 다 만들고나니.. 이것을 클라이언트에서 어떻게 사용하게 만들까 무척 고심했는데 그 고민을 하며 얻은 것들을 간략히 정리해보려고 한다. 유효성 검증 라이브러리는 자주 사용하면서 추가적인 확장이 필요없는 utility성 메서드들이다. 개떡같은 확장, 구현 이런것과 상관없이 단발성으로 검사해서 true/false를 반환하면 그만이기 때문이다. 다 좋은데 싹다 정적 메서드로 만들자니 호출되는 빈도가 비지니스 로직 전반에 걸친 것은 아니고... 생성자를 제공하자니... 2019. 4. 15.
빌더 패턴! 정적 팩토리와 생성자에는 제약이 있다. 클래스의 매개변수가 많아지면 대응하기가 어렵다. 이를 보완할 수 있는 것이 빌더 패턴이다. 앞에 Bean Builder에 대해 정리할 때 잠깐 언급했던듯 내가 최근에 SNS 로그인 관련된 개발을 진행하다보니.. 그 것을 예시로 들어보겠다. 각 SNS 로그인 google, LinkedIn, Twitter, kakao, facebook etc... API는 제공하는 정보가 다르다. 그 중 내가 필요한 정보를 요약해보자면 이름(필수) 나이 성별 전화번호 주소 이메일 생년월일 대충 이정도 있을 것이다. 저것을 기준으로 클래스를 구상하면 name은 필수값이기에 name만을 가진 생성자 하나 그 외에 age 부터 birthDate까지는 어느 필드가 null이고 데이터가 있을지.. 2019. 4. 8.
정적 팩토리 메서드의 장단점 클라이언트가 클래스의 인스턴스를 얻는 전통적인 수단은 public 생성자 보통 Class myClass = new Class(); 이런식으로 인스턴스하여 객체 참조값을 받아서 사용한다. 이런 생성자 대신 정적 팩토리 메서드를 사용할 때 이점을 알아보자. 정적 패토리 메서드 클래스는 클라이언트에 public 생성자 대신 정적 팩토리 메서드를 제공할 수 있다. 밑에 잡소리가 길지만 한 마디로 요약하자면 정적 팩토리 메서드의 장점은 '유연성' 1 이름을 가질 수 있다 정적팩토리 메서드는 이름을 통해서 반환하는 객체가 무엇인지 직관적으로 나타낼 수 있다. ex) 'BigInteger.probablePrime()' -> 값이 소수인 BigInteger를 반환한다는 것을 더 잘 표현 2.. 2019. 4. 7.