분류 전체보기(155)
-
[아이템12] 정적 유틸리티 클래스는 toString을 제공할 이유가 없다.
정적 유틸리티 클래스는 일반적으로 정적 메서드만 가지는 클래스이고, 필드가 있더라도 클래스를 나타내는 정보가 아니라 메서드의 기능을 수행하기 위해 필요한 정보를 저장하는 필드이므로 toString으로 보여줄 만큼 유용한 정보가 없기 때문에 toString을 제공할 필요가 없다.정적 유틸리티 클래스란?정적 유틸리티 클래스(Static Utility Class)는 자바에서 유용한 기능을 제공하는 정적 메서드(Static Methods)로 구성된 클래스입니다. 이러한 클래스는 주로 인스턴스 변수를 가지지 않고, 객체를 생성하지 않고도 메서드를 직접 호출하여 작업을 수행합니다. 정적 유틸리티 클래스는 코드의 모듈화와 재사용을 촉진하며, 자주 사용되는 기능을 논리적으로 그룹화하는 데 유용합니다.정적 유틸리티 클래..
2024.07.01 -
[아이템8] finalizer를 사용한 클래스는 finalizer 공격에 노출되어 심각한 보안 문제를 일으킬 수도 있다.
finalizer는 정적 필드에 자신의 참조를 할당하여 가비지 컬렉터가 수집하지 못하게 막을 수 있다.public class Zombie { static Zombie zombie; public void finalize() { zombie = this; }}객체 생성을 막으려면 생성자에서 예외를 던지는 것만으로 충분하지만 finalizer 있다면 그렇지도 않다.public class Zombie2 { static Zombie2 zombie; int value; public Zombie2(int value) { if(value vlaue 값에 대한 유효성 검사가 있지만 finalizer로 인해 무효화
2024.07.01 -
[아이템3] 직렬화된 인스턴스를 역직렬화할 때마다 새로운 인스턴스가 만들어진다.
싱글턴 클래스는 생성자를 private으로 만들기 때문에 인스턴스를 하나로 유지할 수 있는 것인데 역직렬화는 생성자를 사용하는 것이 아니라 직렬화된 객체의 정보를 읽어 그대로 복원하는 것이기 때문에 별도의 조치를 취하지 않으면 새로운 인스턴스가 생기는 것을 막을 수 없음readResolve 메서드는 직렬화된 데이터를 역직렬화할 때 호출되는 특별한 메서드로, 해당 메서드를 사용하여 역직렬화된 객체를 임의로 대체하거나 수정할 수 있는 기능을 제공public class Elvis { private static final Elvis INSTANCE = new Elvis(); private Elvis() {...} public static Elvis getInstance() {return INSTANCE;}..
2024.07.01 -
[아이템1] 자바 8부터는 인터페이스가 정적 메서드를 가질 수 없다는 제한이 풀렸기 때문에 인스턴스화 불가 동반 클래스를 둘 이유가 별로 없다.
이펙티브 자바자바 6 출시 직후 출간된 『이펙티브 자바 2판』 이후로 자바는 커다란 변화를 겪었다. 그래서 졸트상에 빛나는 이 책도 자바 언어와 라이브러리의 최신 기능을 십분 활용하도록 내용 전반을 철저히 다시 썼다. 모던 자바가 여러 패러다임을 지원하기 시작하면서 자바 개발자들에게는 구체적인 모범 사례가 더욱 절실해졌고, 관련 조언을 이 책에 담아낸 것이다. 3판에는 자바 7, 8, 9에서 자바 언어와 라이브러리에 추가된 특성들을 녹여냈다. 특히 그동안 객체 지향에 치중하던 자바에 새로 도입된 함수형 프로그래밍 요소도 자세히 알아본다. 람다(lambda)와 스트림(stream)만을 다룬 장을 포함하여 새로운 아이템도 많이 추가되었다. 새롭게 다루는 주제들 - 함수형 인터페이스, 람다식, 메서드 참조, ..
2024.07.01 -
HTTP 헤더 2 - 캐시와 조건부 요청
모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의 실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., [사진] 📣 확인해주세요!본 강의는 자바 스프링 완전 정복 시리즈의 세 번째 강의입니다. 우아한형제들 최연소 기술 www.inflearn.com 캐시 기본 동작 캐시가 없을 때 데이터가 변경되지 않아도 계속 네트워크를 통해서 데이터를 다운로드 받아야 함 인터넷 네트워크는 매우 느리고 비쌈 브라우저 로딩 속도가 느림 느린 사용자 경험 캐시 적용 캐시 덕분에 캐시 가능 시간동안 네트워크를 사용하지 않아도 됨 비싼 네트워크 사용량을 줄일 수 있음 브라우저 로딩 속도가 매우 빠름 빠른 사용자 경험 캐시 시간 초과 캐시 유효 시간이 초과하면, 서버를 통해 데이터를..
2023.10.25 -
HTTP 헤더 1 - 일반 헤더
모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의 실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., [사진] 📣 확인해주세요!본 강의는 자바 스프링 완전 정복 시리즈의 세 번째 강의입니다. 우아한형제들 최연소 기술 www.inflearn.com HTTP 헤더 header-field = field-name ":" OWS field-value OWS field-name은 대소문자 구문 없음 용도 HTTP 전송에 필요한 모든 부가정보 예) 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐 시 관리 정보... 표준 헤더가 너무 많음 필요시 임의의 헤더 추가 가능 분류 - RFC2616(과거) General 헤더 : 메시..
2023.10.25