it 서적 독후감 8

[ITEM 18] 상속보다는 컴포지션을 사용하라

컴포지션은 합성을 뜻한다.  상속은 코드를 재사용하는 강력한 수단이지만 항상 최선은 아니다 잘못 사용하면 오히려 오류를 내기 쉬운 소프트웨어를 만들게 된다 확장을 할 목적으로 설계하였고 문서도 잘 정리가 되어있으면 괜찮다 하지만 구체 클래스를 패키지를 경계를 넘어, 즉 다른 구체 클래스를 상속 받는것은 위험하다.  상속은 캡슐화를 깨뜨린다 다르게 말하면 상위 클래스가 어떻게 구현되느냐에 따라 하위 클래스 동작에 이상이 생긴다. 바로 코드 예를 보자면 직접 HashSet을 상속 받은 코드 import java.util.Collection;import java.util.HashSet;import java.util.Set;public class InstrumentedHashSet extends HashSet ..

[ITEM 17] 변경 가능성을 최소화 하라

이번 이팩티브 자바에서 소개하는 챕처는 꽤나 긴편이다중복된 이야기가 자주 나오지만 그 이유는 중요하기 때문에 반복하고 강조하는것이다 해당 챕터를 읽고 내가 생각하는 조슈아 블로크가 독자들에게 전달하고 싶은 키워드는 바로 캡슐화이다.캡슐화는 모든 소프트웨어의 기본 근간이 되는 아주 중요한 개념이다 캡슐화를 통해 많은 장점을 가질 수 있다.  객체의 변경 가능성을 최소화 하면 코드의 변경이 유연하고 쉬워진다이렇게 들으면 뭔가 논리적으로 안맞는것 같지만 사실이다캡슐화를 통해 얻을 수 있는 가장 큰 장점 중 하나는 객체들간의 결합도를 낮출 수 있다.  책 OBJECT의 저자 조영호는 기능을 수정하는데 클래스 하나 이상 수정을 해야한다면 그건 결합도가 높다고 말하기도 했다. 결합도는 한 모듈이 변경되기 위해서 다..

[ITEM 16] public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라

간혹 단순히 여러 값을 담은 인스턴스가 필요한 객체를 생성할 때 이렇게 작성하는 경우가 있다.public class PointV1 { public double x; public double y;} 나의 경우에는 코딩테스트 코드 작성할때 getter, setter 메서드로 호출하는것이 너무 귀찮아서 이렇게 한적은 있지만실제로 어플리케이션 개발 때는 절대 사용하지 않는 클래스 설계다.. 이 코드의 문제점은 다음과 같다생성자를 통해 값을 셋팅하지 않아 필수값을 누락할 수 있다생성자를 통해 값을 셋팅하지 않아 x,y의 불변식이 무너질 수 있다.외부 공개 클래스인데 내부 상태를 완전히 노출되어 언제 객체가 이상하게 작동해도 이상할 점이 없다캡슐화의 이점을 얻을 수 없다. (객체의 자율성을 보장하지 못한..

[ITEM 15] 클래스와 멤버의 접근 권한을 최소화 하라

잘 설계된 컴포넌트와 어설프게 설계된 컴포넌트의 차이는 내부 구현 정보를 외부로 부터 얼마나 잘 숨겼느냐다정보은닉, 혹은 캡슐화라고 하는 이 개념은 소프트웨어 설계의 근간이 되는 원리다.  기본원칙은 간단하다 모든 클래스와 멤버의 접근성을 가능한 좁혀야 한다.  자바의 접근제한자는 다음과 같다public : 모든 곳에서 접근 가능protected : 같은 패키지에서는 자유롭게 접근 가능 | 다른 패키지에 있는 경우에는 하위 클래스(상속 관계)에서만 접근 가능.package-private :같은 패키지 내에서만 접근 가능, 다른 패키지에서는 접근 불가능.private : 해당 클래스에서만 접근 가능멤버 접근성을 좁히지 못하게 방해하는 제약 한가지 있다. 상위 클래스의 메서드를 재정의할 때는 그 접근 수준을..

자바 ExcutorService 프레임웍의 ExcutorCompletionService 활용

자바 1.7 이후 부터 개발자들은  ExcutorService 프레임웍을 활용하여 손쉽게 병렬 프로그램을 작성할 수 있다.이번에 소개할 ExecutorCompletionService 객체는 여러 비동기 작업을 실행하고, 완료된 작업의 결과를 순서대로 가져오는 클래스다위 소개에 언급한것과 마찬가지로 완료된 작업을 순서대로 가져와야 하기때문에 해당 작업을 객체는 Callable을 구현해야한다.  @FunctionalInterfacepublic interface Callable { V call() throws Exception;} 위처럼 제네릭으로 선언되어있는것 처럼 값을 반환 받을 수 있어야 한다.* Runnable 구현받은 작업은 제출한 값에 대해서 값을 받을 수 없다.  우선 이번예제는 각 이미지 ..

Thread 중단 및 종료

작업이나 스레드를 안전하고 빠르고 안정적으로 멈추게 하는 일은 어려운 일이다..자바에서는 스레드를 멈추게 하는 방법이 없다. 대신 interrupt라는 방법을 사용할 수 있다.  작업 중단 시나리오1. 사용자가 취소하기를 요청한 경우  : 사용자가 중간에 취소 버튼을 눌러 취소를 요청한 경우2. 시간이 제한된 작업 : 일정한 시간 내 답이 될만한 결과를 계속 찾다 제한된 시간이 지나면 나온 결과중 가장 최적의 해에 가까운 값을 반환 하고 나머지 는 작업을 취소하는 경우3. 애플리케이션 이벤트 : 원하는 결과를 얻기 위해 다양한 조건을 지정해 여러 작업을 동시에 실행시킨다. 특정 작업 결과를 얻었다면 나머지는 작업은 모두 취소하는 경우4. 오류 : 예상치 못한 오류로 진행 중이던 작업을 취소하고 현재 진행..

Java 병렬프로그래밍 chap 1

1. 서론 (왜 이 책을 읽게 되었는가) 스레드에 대해 김영한님의 강의를 보고 포스팅을 작성하며 여러 번 내용을 확인했지만,결국 스레드의 전반적인 큰 틀과 사용법 정도만 익힌 느낌을 받았다. 실무에서 사용하는 데 큰 문제가 없다고 생각했지만,제 개인적인 부족한 견해일 수도 있다는 생각에좀 더 깊이 파고들고자 이펙티브 자바의 저자 조슈아 블로크가 추천한 **“자바 병렬프로그래밍”**이라는 책을 읽기 시작했다.사실, IT 업계에서 유명한 모 기업에 근무하셨던 개발자 분이 추천해 주신 책이다. 그분의 말씀에 따르면, 이 책을 통해 내가 작성하는 코드가 Thread Safe인지 아닌지 판단할 기준을 마련해 주었다고 한다. 또한, 자바는 태생부터 병렬 프로그래밍을 염두에 둔 언어이다.그 증거로, 자바의 옛 컬렉션..

함수형 코딩

개요앞으로 읽은 책은 it 서적 독후감을 통해서 내가 읽은 내용을 요약하고 나만의 생각을 정리하고자 해당 포스팅을 하게 되었습니다.  왜 이책을 읽게 되었는가..인프런이라는 온라인 강의 사이트가 있는데 해당 플랫폼에서는 "멘토링" 이라는 서비스가 존재한다해당 서비스는 내가 관심있는 분야에 오랫동안 일한 분들과 1시간 남짓 이야기를 할 수 있는 서비스인데그분이 추천해준 여러 책중에 하나 였다.객체지향 이라는 패러다임과 더불어 클린코드가 개발자의 칼퇴와 높은 연봉을 안겨준다고 생각한다면 익혀두는게 좋다고 생각해서 읽게 되었다. 내용어느 서적이나 마찬가지로 책 혹은 글을 잘쓰는 사람들의 특징은 가장 중요한 내용을 앞에 서술하고그 다음 중요한 내용 순으로 서술 하고는 한다내가 읽고 있는 함수형 코딩 이라는 책의..

it 서적 독후감 2024.07.30