자바

    [아이템 5] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라

    많은 클래스가 하나 이상의 자원에 의존한다. 여기서 의존관계란 무엇일까? 'A가 B를 의존한다'의 의미는 의존대상 B가 변하면, 그것이 A에 영향을 미친다는 것이다. 예를 들어, 맞춤법 검사기는 사전에 의존하는데 이를 정적 클래스로 구현하면 아래와 같이 구현할 수 있다. public class SpellChecker { private static final Lexicon dictionary = ...; private SpellChecker() {} public static boolean isValid(String word) {...} public static List suggestions(String typo) {...} } 비슷하게, 싱글톤으로 구현하는 경우도 있다. public class SpellC..

    [아이템 2] 생성자에 매개변수가 많다면 빌더를 고려하라

    정적 팩토리와 생성자에는 똑같은 제약이 있다. 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 점이다. 1. 점층적 생성자 패턴 필수 매개변수만 받는 생성자, 필수 매개변수와 선택 매개변수 1개를 받는 생성자, 선택 매개변수를 2개까지 받는 생성자, ... 형태로 선택 매개변수를 전부 다 받는 생성자까지 늘려가는 방식이다. public class NutritionFacts { private final int servingSize; private final int servings; private final int calories; private final int fat; private final int sodium; private final int carbohydrate; public Nutrition..

    [아이템 1] 생성자 대신 정적 팩토리 메소드를 고려하라.

    객체 생성시 보통 public 생성자를 이용한다. 하지만, 생성자를 사용하는 방법 이외에 정적 팩토리 메소드를 사용해서 만들 수 있다. 정적 팩토리 메소드를 이용하여 생성하면 아래와 같은 장점이 있다. 첫 번째, 이름을 가질 수 있다. 생성자에 넘기는 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 제대로 설명하지 못한다. 반면 정적 팩토리 메소드는 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다. 또한, 생성자를 이용하면 같은 매개변수 타입을 가진 생성자는 하나만 만들 수 있다. 하지만 정적 팩터리 메서드를 이용하여 구현하게 되면, 이름을 통해 각 함수의 역할을 나타낼 수 있으므로 이러한 문제점을 해결할 수 있다. 두 번째, 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다. 인스턴..

    4. 상속

    상속 부모 클래스의 멤버를 자식 클래스에게 물려주는 것 class 자식클래스 extends 부모클래스 { ... } 조상 클래스 : 상속 해주는 클래스 (부모 클래스, 상위 클래스, 기반 클래스) 자손 클래스 : 상속 받는 클래스 (자식 클래스, 하위 클래스, 파생된 클래스) 상속의 장점 1. 코드의 중복을 줄여줌 2. 개발 시간 줄여줌 3. 수정을 최소화 -> 유지 보수 시간 최소화 상속의 특징 1. 생성자와 초기화 블럭은 상속되지 않는다. 멤버만 상속된다. 2. 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다. 3. 자손 클래스의 인스턴스를 생성하면 조상 클래스의 멤버와 자손 클래스의 멤버가 합쳐진 하나의 인스턴스로 생성된다. 4. 부모 클래스에서 private 접근 제한을 갖는 필드와 ..

    3. 클래스

    클래스와 객체, 인스턴스 클래스 : 객체를 정의해 놓은 것, 객체의 설계도 또는 틀 객체 : 클래스에 정의된 내용대로 메모리에 생성된 것(실제로 존재하는 것) 인스턴스 : 클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화 라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다. 객체와 인스턴스의 차이점 인스턴스와 객체는 같은 의미이지만, 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖고 있으며, 인스턴스는 어떤 클래스로부터 만들어진 것인지를 강조하는 보다 구체적인 의미를 갖고 있다. ex) 책상은 인스턴스다라고 하기 보다는 책상은 객체다라는 쪽이, 책상은 책상 클래스의 객체이다라고 하기 보다는 책상은 책상 클래스의 인스턴스다 라는 쪽이 자연스럽다. 객체의 구성 속성 : 멤버 ..

    2. 데이터 타입, 변수

    데이터 타입 1. Primitve type : 정수, 실수, 문자, 논리 리터럴을 직접 저장하는 타입 2. Non-Primitive type Reference Type 참조형 타입(Reference Type) 기본형 타입을 제외한 타입들이 모두 참조형 타입이다. null 값이 존재한다 주소값을 저장하는 공간으로 Heap에 저장된다. ReferenceType 자료형 보다 기본형 자료형을 선호하는 이유 산술 연산이 가능하다. 매개변수로 객체가 요구되지 않을 때 기본값을 주어져서 저장할 때 객체간의 비교가 없을 때 참조 타입 변수들 간의 !=, == 연산은 동일한 객체를 참조하는지, 다른 객체를 참조하는지 알아볼 때 사용 참조 타입 변수의 값 -> 힙 영역의 객체 주소(값을 비교하려면 equals) 문자열 저..