본문 바로가기

java

[Effective Java] 아이템 18. 상속보다는 컴포지션을 이용하라 안녕하세요 남갯입니다. 오늘은 이펙티브 자바 아이템 18. 상속보다는 컴포지션을 이용하라 에 대해 포스팅하려고 합니다. 상속은 코드를 재사용하는 강력한 수단이지만 항상 최선은 아니고 잘못사용하면 오류를 내기 쉽다. 여기서 말하는 상속은 구현상속을 말한다.(클래스가 다른 클래스를 상속하는 행위만을 말한다)메서드 호출과 달리 상속은 캡슐화를 깨트린다. 자식클래스는 부모클래스에 의존하기 때문에 부모클래스의 동작을 변경함에 따라 하위클래스가 오동작을 할 수 있다. 이렇게 상위클래스 설계자가 확장을 충분히 고려하고 문서화를 안하면 변경하지 않은 하위 클래스도 변경해야 한다. HashSet을 사용하는 프로그램이 있고 이 성능을 올리기위해 변경된 코드를 만들었다. public class InstrumentedHash..
[Effective Java] 아이템 42. 익명클래스 보다는 람다를 사용하라. 안녕하세요 남갯입니다. 오늘은 아이템 42. 익명클래스 보다는 람다를 사용하라 를 작성해보려고 합니다. Collections.sort(words, new Comparator() { @Override public int compare(String o1, String o2) { return Integer.compare(o1.length(), o2.length()); } }); 위와 같이 익명클래스를 이용해서 생성하게 되면 코드가 너무길고, 함수형 프로그래밍에 적합하지 않았지만 람다를 이용해 불필요한 코드가 사라지고 동작을 명확하게 이해 가능하다. Collections.sort(words, (o1, o2) -> Integer.compare(o1.length(), o2.length()));타입을 명시해야 코드가..
[Effective Java] 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라. 안녕하세요 남갯입니다 오늘은 이펙티브 자바 3/e에 대한 내용을 공유하려고합니다. 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라. 클라이언트가 클래스의 인스턴스를 얻는 전통적인 방법의 수단은 public 생성자이다. 하지만 프로그래머는 클래스와는 별개로 정적 팩터리 메서드를 제공할 수 있다.*팩토리 메소드 패턴과 다른 내용 일단 생성자 대신 정적 팩토리 메소드를 고려하는 방식은 장점과 단점이 존재한다. 5가지의 장점 1. 이름을 가질 수 있다.생성자에 넘기는 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 제대로 설명하지 못한다.반면에 정적 팩터리는 이름만 잘 지으면 반환될 객체의 특성을 묘사가 가능하다. 예를들어 BigInteger(int, int, Random) 이라는 소스와 - (생성자..
[RxJava,RxKotlin] RxJava , Observable 알아보기 안녕하세요 남갯입니다 개인적으로 RxJava,RxKotlin 에 대해 정리해보려고합니다. ReactiveX란 ?ReactiveX 는 비동기 프로그래밍 그리고 Observable 시퀀스를 이용해 이벤트를 처리하기위한 라이브러리입니다.즉 위 말을 간단하게 말해보면 비동기적 데이터흐름을 처리하는 프로그래밍입니다. Rxjava는 2013년 2월 넷플리스 기술블로그에서 처음 소개되었고 REST기반의 서비스를 개선하고자 프로젝트를 진행했고 .net환경의 rx를 JVM에 포팅하여 만들어지게 되었습니다. Observable이란? ReactiveX는 옵저버패턴을 사용하기 때문에 rx의 Observer는 Observable을 구독하게 됩니다. Observable이 emit하는 하나 혹은 연속된 item 에 대해 Obser..