본문 바로가기

스터디64

[이펙티브 자바] 08. 일반적인 프로그래밍 원칙 [이펙티브 자바] 08. 일반적인 프로그래밍 원칙 아이템 57. 지역변수의 범위를 최소화하라 지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아진다. 지역변수의 범위를 줄이는 가장 좋은 방법은 '가장 처음 쓰일 때 선언하기'다. 지역 변수를 미리 선언하게 되면 사용하고자 하는 블록이 끝난 뒤에도 살아있을 수 있어 끔찍한 결과가 생길 수 있다. 거의 모든 지역변수는 선언과 동시에 초기화해야 한다. try-catch문 예외 반복문에서의 변수 범위 초기화 반복문에서는 독특한 방식으로 변수 범위를 최소화한다. 반복문에서는 반복 변수의 범위가 반복문의 몸체, 그리고 for 키워드와 몸체 사이의 괄호 안으로 제한된다. 따라서 반복 변수의 값을 반복문이 종료된 뒤에도 써야하는.. 2022. 9. 27.
[이펙티브 자바] 07. 메서드 [이펙티브 자바] 07. 메서드 아이템 49. 매개변수가 유효한지 검사하라 메서드와 생성자 대부분은 입력 매개변수의 값이 특정 조건을 만족하기를 바란다. 이런 제약은 반드시 문서화해야 하며 메서드 몸체가 시작되기 전에 검사해야 한다. "오류는 가능한 한 빨리 (발생한 곳에서) 잡아야 한다"는 일반 원칙의 한 사례이기도 하다. 오류를 발생한 즉시 잡지 못하면 해당 오류를 감지하기 어려워지고, 감지하더라도 오류의 발생 지점을 찾기 어려워진다. 메서드 몸체가 실행되기 전에 매개변수를 확인한다면 잘못된 값이 넘어왔을때 즉각적이고 깔끔한 방식으로 예외를 던질 수 있다. 매개변수 검사를 제대로 하지 못했을 때 생기는 문제 메서드가 수행되는 중간에 모호한 예외를 던지며 실패할 수 있다. 메서드는 잘 수행되었지만 잘못.. 2022. 9. 21.
[이펙티브 자바] 06. 람다와 스트림 [이펙티브 자바] 06. 람다와 스트림 아이템 42. 익명 클래스보다는 람다를 사용하라 예전에는 자바에서 함수 타입을 표현할 때 추상 메서드를 하나만 담은 인터페이스(드물게는 추상 클래스)를 사용했다. 이런 인터페이스를 함수 객체(function object)라고 하여, 특정 함수나 동작을 나타내는 데 썼다. 익명 클래스의 인스턴스를 함수 객체로 사용 - 낡은 기법이다! Collections.sort(words, new Comparator() { @Override public int compare(String s1, String s2) { return Integer.compare(s1.length(), s2.length()); } }); 전략 패턴처럼, 함수 객체를 사용하는 과거 객체 지향 디자인 패턴에.. 2022. 9. 14.
[이펙티브 자바] 05. 열거 타입과 애너테이션 [이펙티브 자바] 05. 열거 타입과 애너테이션 자바에는 특수한 목적의 참조 타입이 두 가지가 있다. 하나는 클래스의 일종인 열거 타입(enum)이고, 다른 하나는 인터페이스의 일종인 애너테이션(annotation)이다. 아이템 34. int 상수 대신 열거 타입을 사용하라 자바에서 열거 타입을 지원하기 전에는 아래 코드처럼 정수 상수를 한 묶음 선언해서 사용하곤 했다. public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 1; public static final int ORANGE_NAVEL = 0 public static final int ORANGE_TEMPLE = 1; 정수 열거 패턴 기법에는 단점이 많다. 1.. 2022. 9. 1.
[이펙티브 자바] 04. 제네릭 [이펙티브 자바] 04. 제네릭 제네릭은 자바 5부터 사용할 수 있다. 제네릭을 지원하기 전에는 컬렉션에서 객체를 꺼낼 때마다 형변환을 해야했는데, 런타임에 형변환 오류가 나곤 했다. 반면 제네릭을 사용하면 컬렉션이 담을 수 있는 타입을 컴파일러에 알려주게 되어 컴파일러는 알아서 형변환 코드를 추가할 수 있게 된다. 덕분에 더 안전하고 명확한 프로그램을 만들 수 있다는 장점이 있지만, 코드가 복잡해진다는 단점이 있다. 아이템 26. 로 타입은 사용하지 말라 클래스와 인터페이스 선언에 타입 매개변수가 쓰이면, 이를 제네릭 클래스 혹은 제네릭 인터페이스라 한다. 각각의 제네릭 타입은 일련의 매개변수화 타입을 정의한다. 제네릭 타입을 하나 정의하면 그에 딸린 로 타입(raw type)도 함께 정의된다. 로 타.. 2022. 8. 24.
[헤드퍼스트 디자인패턴] 10. 프록시 패턴 (Proxy pattern) [헤드퍼스트 디자인패턴] 10. 프록시 패턴 (Proxy pattern) 1. 프록시 패턴이란? 특정 객체로의 접근을 제어하는 대리인을 제공한다. 프록시 패턴을 사용하면 원격 객체나 생성하기 힘든 객체, 보안이 중요한 객체와 같은 다른 객체로의 접근을 제어하는 대리인 객체를 만들 수 있다. 2. 프록시에서 접근을 제어하는 몇가지 방법 원격 프록시를 써서 원격 객체로의 접근을 제어할 수 있다. 가상 프록시(virtual proxy)를 써서 생성하기 힘든 자원으로의 접근을 제어할 수 있다. 보호 프록시(protection proxy)를 써서 접근 권한이 필요한 자원으로의 접근을 제어할 수 있다. 3. 프록시 패턴의 클래스 다이어그램 RealSubject : 진짜 작업을 처리하는 객체 Proxy : RealS.. 2022. 8. 21.
728x90
반응형