본문 바로가기

개발 공부125

이펙티브 자바 아이템 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.
이펙티브 자바 아이템 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.
이펙티브 자바 아이템 14 - Comparable 을 구현할지 고민하라 - 핵심 정리 아이템 14 - Comparable 을 구현할지 고민하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. Comparable 은 Object 가 제공하는 메서드는 아니지만 일반적으로 널리 사용할 수 있는 인터페이스 이다. Comparable 은 엘리먼트가 지닌 자연적인 순서(natural order) 를 정해줄 때 사용하는 인터페이스이다. Comparable 은 우리가 비교해주고 싶은 순서가 있는 경우에 그 비교 방법을 구현할 수 있다. Comparable 은 제네릭 타입 을 가지고 있기 때문에 컴파일 타임 에 체크가 가능한 장점이 있다. compareTo 를 재정의 할때는 몇가지 규약이 있다. compareTo 규약 compareTo 메서.. 2022. 10. 31.
[리뷰 이벤트] 이것이 자바다 이 글은 okky에서 진행된 이것이 자바다 리뷰 이벤트를 통해 작성되었습니다. 운 좋게 이벤트에 당첨되어서 이것이 자바다 라는 책을 받았습니다. 자바는 현재 17 버전까지 나온 상태입니다. 최근 자바 기본서를 통해 기초를 다지려고 책을 찾아보던 중에 느낀점은 요즘 나온책이 거의 없다 입니다. 그러던 중 이것이 자바다 라는 책이 개정판으로 재출간한다는 소식을 접했습니다. 장점 이 책의 장점으로 가장 크게 꼽는 건 자바 17LTS 버전까지 대응하는 내용이 추가되었다는 것입니다. 기존의 책들이 예전에 나온책이기 때문에 아무래도 오래된 책들로 공부하는 건 찜찜함이 있기 마련입니다. 이것이 자바다는 예전부터 유명했던 이것이 000다 시리즈 중 하나이기 때문에 더 믿고 공부할 수 있게되었습니다. 두번째 장점으로는 .. 2022. 10. 28.
이펙티브 자바 아이템 13 - clone 재정의는 주의해서 진행하라 - 완벽 공략 아이템 13 - clone 재정의는 주의해서 진행하라 - 완벽 공략 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. UncheckedException 우리는 보통 UncheckedException 을 선호햔다. public class MyException extends RuntimeException { } UncheckedException 은 RuntimeException 을 상속 받은 Exception 이다. public class MyException extends Error { } Error 를 상속받은 클래스들 역시 UncheckedException 이라고 부를 수 있다. RuntimeException 과 Error 를 확장한 클래스들은 Unche.. 2022. 10. 28.
이펙티브 자바 아이템 13 - clone 재정의는 주의해서 진행하라 - 핵심 정리 아이템 13 - clone 재정의는 주의해서 진행하라 - 핵심 정리 이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다. clone 규약 clone 메서드는 Object 에 정의되어있는 메서드이다. public interface Cloneable { } 아무것도 정의되어 있지 않은 Cloneable 인터페이스가 존재한다. clone 메서드를 구현하려면 Cloneable 인터페이스를 implements 해야한다. Cloneable 인터페이스를 implements 하지 않으면 clone 메서드 는 동작하지 않는다. 오브젝트에 정의되어있는 clone 메서드 기능을 제공하기 위해서는 Cloneable 인터페이스를 implements 한다. clone 메서드 를 오버라.. 2022. 10. 27.