본문 바로가기

분류 전체보기147

이펙티브 자바 아이템 19 - 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 - 핵심 정리 아이템 19 - 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 상속용 클래스는 내부 구현을 문서로 남겨야 한다. 상속 대신 컴포지션 을 사용하라고 했지만 상속은 객체지향의 가장 큰 특징이자 여러가지 코드를 재사용하는 좋은 방법 중 하나이기 때문에 어떻게하면 상속을 잘 사용할 수 있을지에 대한 아이템이다. 상속을 허용할거라면 문서화 를 해야한다. 상속용 클래스에스 재정의를 허용 하는 메서드에는 해당 메서드에 내부 동작 원리를 문서화해야한다. 좋은 API 는 어떻게가 아니라 무엇을 해야하는지에 대해 설명해야한다 라는 격언과 반대되는 말이다. 문서를 읽었을 떄 해당하는 클래스가.. 2022. 11. 25.
이펙티브 자바 아이템 18 - 상속보다는 컴포지션을 사용하라 - 완벽 공략 아이템 18 - 상속보다는 컴포지션을 사용하라 - 완벽 공략 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 데코레이터 패턴 데코레이터 패턴은 기존 코드를 변경하지 않고 부가 기능을 추가하는 패턴 이다. 데코레이터는 상속이 아니라 위임 을 사용하는 대표적인 디자인 패턴 중 하나이다. 굳이 새로운 클래스를 만들 필요없이 기존의 클래스를 조합해 새로운 인스턴스를 만들 수 있다. 단점으로는 조합을 하는 코드가 복잡해 질 수 있다. public class ForwardingSet implements Set { private final Set s; public ForwardingSet(Set s) { this.s = s; } public void clear() {.. 2022. 11. 24.
이펙티브 자바 아이템 18 - 상속보다는 컴포지션을 사용하라 - 핵심 정리 아이템 18 - 상속보다는 컴포지션을 사용하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 패키지 경계를 넘어 다른 패키지의 구체 클래스를 상속하는 일은 위험하다 주의할 점은 인터페이스 상속이 아니라 구체적인 클래스 를 상속할 때의 이야기이다. public class InstrumentedHashSet extends HashSet { // 추가된 원소의 수 private int addCount = 0; public InstrumentedHashSet() { } public InstrumentedHashSet(int initCap, float loadFactor) { super(initCap, loadFactor); } @Override .. 2022. 11. 22.
이펙티브 자바 아이템 17 - 변경 가능성을 최소화 하라 - 완벽 공략 아이템 17 - 변경 가능성을 최소화 하라 - 완벽 공략 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 새로 생성된 불변 인스턴스를 동기화 없이 다른 스레드로 건네도 문제없이 동작 불변 인스턴스는 synchronized 와 같은 동기화 작업을 할 필요없이 다른 스레드에서 공유해서 써도 안전하다. final 과 자바 메모리 모델(JMM) final 은 해당 변수가 초기화가 되면 다른 값으로 바뀌지 않게 해주는 것이다. 상수로 만들때 주로 사용한다. final 을 사용하면 해당하는 필드값을 안전하게 초기화 할 수 있다. 이를 이해하려면 자바 메모리 모델에 대한 개념과 자바 메모리 모델에서 final 이 어떻게 동작하는지 이해해야한다. 자바 메모리 모델은 J.. 2022. 11. 21.
이펙티브 자바 아이템 17 - 변경 가능성을 최소화 하라 - 핵심 정리 아이템 17 - 변경 가능성을 최소화 하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 불변 클래스 불변 클래스란 한번 만들어지면 그 인스턴스의 상태가 바뀌지 않는 것 을 말한다. 그 인스턴스가 소멸될 때까지 인스턴스의 내부의 값들이 변경되지 않는 것이다. 이렇게 설계된 클래스를 불변 클래스 라고 하고 불변 클래스의 인스턴스를 불변 인스턴스 라고 한다. 불변 클래스를 만들기위한 다섯가지 규칙이 있다. 객체의 상태를 변경하는 메서드를 제공하지 않는다. public class PhoneNumber { private short areaCode, prefix, lineNum; public void setAreaCode(short areaCode.. 2022. 11. 21.
이펙티브 자바 아이템 16 - public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 - 완벽 공략 아이템 16 - public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 - 완벽 공략 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 내부를 노출한 Dimension 클래스의 심각한 성능 단순히 public 필드를 만들었다고해서 설계적인 문제는 생기겠지만 어떻게 성능 문제까지 생길 수 있을까 public class DimensionExample { public static void main(String[] args) { Button button = new Button("hello button"); button.setBounds(0, 0, 20, 10); Dimension size = button.getSize(); System.out... 2022. 11. 14.
이펙티브 자바 아이템 16 - public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 - 핵심 정리 아이템 16 - public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라. 주의할 점은 public 클래스인 경우에 해당한다는 것이다. public class Point { public double x; public double y; } 위와 같이 public 필드를 사용하면 외부 클래스에서는 public class main { public static void main(String[] args) { Point point = new Point(); point.x = 10; point.y = 20; Sy.. 2022. 11. 14.
3년 동안 나는 무엇을 했는가... 3년차 개발자가 되어서 이력서를 정리해보며 문득 회의감이 느껴졌다. 이력서를 작성하면서 가장 많은 생각이드는 건 나는 3년동안 무엇을 했는가.... 반성하는 글을 작성하며 마음을 잡아보자.. 개발자로써의 장점 이력서를 작성하면서 문득 든 생각이 나의 개발자로써의 장점은 무엇일까? 이다. 무엇인가 나의 장점이 있다면 앞으로의 개발자로써의 커리어에 큰 도움이 되지 않을까? 나의 장점을 알아야 장점을 살리고 단점을 보완하기 수월할 것 같았다. 내가 생각하는 3년차라면 장점을 찾으면서 나의 개발자로써의 색깔에 대해 어느정도 감을 잡을 시기가 아닐까하는 생각이 들었다. 곰곰히 생각해봤지만 도무지 나의 장점이 떠오르지 않았다. 경기가 침체됨에 따라 나도 나만의 강점이 있어야 하는데 마음이 착잡했다. 물론 이건 주변.. 2022. 11. 10.
이펙티브 자바 아이템 15 - 클래스와 멤버의 접근 권한을 최소화하라 - 완벽 공략 아이템 15 - 클래스와 멤버의 접근 권한을 최소화하라 - 완벽 공략 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 자바 모듈 자바 9 버전에서의 가장 큰 변화는 Java Platform Module System 이다. 줄여서 JPMS 라고도 부른다. 모듈 시스템은 컴포넌트 간의 더 나은 관계를 표현해 줄 수 있는 방법을 제공한다. 이전에는 어떤 컴포넌트가 다른 컴포넌트에서 사용한다는 걸 표시하는 방법은 classpath 뿐이었다. classpath 에 jar 파일을 넣음으로써 현재 프로젝트에서 다른 jar 파일을 참조해 사용할 수 있었다. 이 방법은 참조하는 jar 파일이 없더라도 어플리케이션이 동작한뒤 해당 jar 파일을 참조하려고 할 때 알 수가 .. 2022. 11. 9.
이펙티브 자바 아이템 15 - 클래스와 멤버의 접근 권한을 최소화하라 - 핵심 정리 아이템 15 - 클래스와 멤버의 접근 권한을 최소화하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. 정보 은닉의 장점 정보 은닉의 장점은 다음과 같다. 시스템 개발 속도를 높인다. 정보 은닉을 하려다보면 자연스럽게 인터페이스 를 설계하게 된다. 어떤 인터페이스의 설계를 마치고 나면 그 인터페이스를 사용하는 쪽은 그 인터페이스에 맞게 개발을 하면 된다. 그 인터페이스를 구현하는 쪽 역시 해당 인터페이스에 정의되어 있는 대로 동작할 수 있는 클래스를 개발하면 된다. 이렇게 인터페이스를 사용하는 쪽과 제공하는 쪽이 동시에 개발 진행이 가능하다. 동시에 여러 모듈을 개발하는 것도 가능하다. 시스템 관리 비용을 낮춘다. 인터페이스를 통해 각 컴포.. 2022. 11. 8.
[강의 후기] 백기선 님의 이펙티브 자바 완벽 공략 1부 https://www.inflearn.com/course/%EC%9D%B4%ED%8E%99%ED%8B%B0%EB%B8%8C-%EC%9E%90%EB%B0%94-1 이펙티브 자바 완벽 공략 1부 - 인프런 | 강의 자바 학습의 끝판왕 “이펙티브 자바”를 보다 쉽고 완벽하게 학습하세요. 이 강의를 수강하시면 여러분의 자바 프로그래밍 지식과 실력뿐 아니라 학습 능력 또한 향상 시킬 수 있습니다., - 강 www.inflearn.com 백기선 님의 이펙티브 자바 완벽 공략 1부 강의 후기입니다. 이펙티브 자바는 자바 개발자들에겐 수학의 정석과도 같은 책입니다. 좋은 책이고 좋은 내용이다 해서 마구잡이로 들이댈 수 없는 책이기 때문인데, 저같은 경우에는 더 멀게만 느껴지던 책이었습니다. 공부할 것들은 산더미처럼 쌓.. 2022. 11. 1.
이펙티브 자바 아이템 14 - Comparable 을 구현할지 고민하라 - 완벽 공략 아이템 14 - Comparable 을 구현할지 고민하라 - 완벽 공략 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. compareTo 메서드의 인수 타입은 컴파일타임에 정해진다. 제네릭 인터페이스에 제네릭 타입을 선언해주면 구체적인 타입을 컴파일 타임에 인수타입이 정해진다. 컴파일 타임 은 작성한 코드가 컴파일 되는 시점을 의미한다. 어떠한 경우든 컴파일 타임 에 문제를 찾는게 더 좋다. 런타임 에서 문제가 발생했다는 것은 문제를 발견하는데까지 시간이 오래걸린다는 의미다. 런타임 에서 발생하는 문제를 해결하는 게 더 까다롭다. Equals 같은 경우 해당 타입이 맞지 않는다는 오류는 런타임 에서 발생한다. 실제로 어떤 오브젝트가 메서드에 들어올지는 런.. 2022. 10. 31.