Language/Java

Language/Java

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

클래스는 대부분 의존성을 지닌다. 이번 아이템에서는 의존 관계를 가지도록 설정하는 방법에 대해 다룬다. 방법1. 정적 유틸리티 : 유연하지 않고 테스트 하기 어렵다 // 부적절한 static 유틸리티 사용 예 - 유연하지 않고 테스트 할 수 없다. public class SpellChecker { private static final Lexicon dictionary = new KoreanDicationry(); private SpellChecker() { // Noninstantiable } public static boolean isValid(String word) { throw new UnsupportedOperationException(); } public static List suggestion..

Language/Java

[effective java] 아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라.

static 메소드와 static 필드만을 담은 클래스는 객체 지향에 어긋난다고 한다. 👇이유 더보기 그럼에도 java.lang.Math, java.util.Arrays, java.util.Collections처럼 필요한 경우가 종종 있다. 더보기 ex1) java.lang.Math, java.util.Arrays : 기본 타입 값이나 배열 관련 메소드들을 모아놓았다. ex2) java.util.Collections : 특정 인터페이스를 구현하는 객체를 생성해주는 생성해주는 정적 메소드(혹은 팩토리)를 모아놓았다. ex3) fianl 클래스와 관련한 메소드들을 모아놓았다.(final 클래스를 상속해서 하위 클래스에 메소드를 넣는 것은 불가능) 애초에 정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만드려고..

Language/Java

[effective java] 아이템 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라.

인스턴스를 오직하나만 생성할 수 있는 클래스를 싱글턴이라고 한다. 함수와 같은 무상태 객체나 설계상 유일해야 하는 시스템 컴포넌트가 그 예다. 클래스를 싱글톤으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있다. 타입을 인터페이스로 정의한 다음 그 인터페이스를 구현해서 만든 싱글톤이 아니라면 싱글톤 인스턴스를 가짜 구현으로 대체할 수 없기 때문이다. 싱글톤으로 만드는 두가지 방법이 있는데, 두 방법 모두 생성자를 private으로 만들고 public static 멤버를 사용해서 인스턴스를 제공한다. 1. public static final 필드 방식 public class Elvis { public static final Elvis INSTANCE = new Elvis(); private..

Language/Java

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

정정 팩토리 메소드와 public 생성자 모두 매개변수가 많을 경우 불편해진다. 해결책 1. 생성자 점층적 생성자 패턴을 사용할 수도 있으나 가독성이 떨어진다. *점층적 생성자 패턴 더보기 필수 매개변수만 받는 생성자부터 필수 매개변수와 선택 매개변수 1개를 받는 생성자 형태로 선택 매개변수를 전부 다 받는 생성자까지 늘려가는 방식 해결책 2. 자바빈 기본 생성자로 인스턴스를 만들어 setter를 사용해서 필드를 설정하는 것이다. public class NutritionFacts { private int servingSize = -1; private int servings = -1; private int calories = 0; private int fat = 0; private int sodium = ..

Language/Java

[effective java] 아이템 6. 불필요한 객체 생성을 피하라.

객체를 새로 만드는 것보다 객체 하나를 재사용하는 것이 대부분 적절하다. 특히 불변 객체는 언제든 재사용할 수 있다. 또한, 가변 객체여도 사용 중에 변경되지 않을 경우 재사용할 수 있다. 문자열 객체 생성 아래 코드는 매번 String 인스턴스를 새로 만든다. String s = new String("yerim"); 반면 아래 코드는 하나의 String 인스턴스를 사용한다. 즉, 문자열 리터럴을 재사용하기 때문에 해당 자바 가상 머신에 동일한 문자열 리터럴이 존재한다면 그 리터럴을 사용한다. String s = "yerim"; static 팩토리 메소드 자바 9에서 deprecated된 Boolean(String) 생성자 대신 Boolean.valueOf(String) 팩터리 메소드를 사용하자. 값이 ..

Language/Java

[effective java] 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라.

클래스의 인스턴스를 얻는 방법은 두 가지가 있다. 첫 번째는 public 생성자를 이용하는 전통적인 수단, 두 번째는 정적 팩터리 메서드를 이용하는 방법이 있다. cf) 정적 팩터리 메서드는 해당 클래스의 인스턴스를 반환하는 정적 메서드를 뜻한다. public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 이번 포스트에서는 정적 팩터리 메서드의 장단점에 대해 알아볼 것이다. 장점 1. 이름을 가질 수 있다. 생성자에 제공하는 매개변수가 반환될 객체의 특성을 제대로 설명하지 못하는 경우, 정적 팩터리 메서드를 사용하는 것을 고려하자. 예시는 아래와 같다. public class Student { String na..

Language/Java

[코딩 테스트를 위한 Java 문법] 입출력

목차 입력 클래스 1. Scanner - System.in - InputStream 2. BufferedReader - InputStreamReader - ReaderStream 3. StringTokenizer 출력 클래스 1. System.out.println() 2. BufferedWriter 3. StringBuilder 입력 클래스 속도 : StringTokenizer >> BufferedReader >> Scanner 1. Scanner 패키지 : java.util Scanner 클래스는 생성자로 전달되는 대상으로부터 데이터를 추출하는 기능을 제공하는 클래스이다. 띄어쓰기와 개행문자를 경계로 입력 값을 인식하며, 버퍼 사이즈가 1024 char이기 때문에 많은 입력을 필요로 할 경우에는 비효율..

JOYERIM
'Language/Java' 카테고리의 글 목록 (10 Page)