자바(20)
-
6장 : 열거 타입과 애너테이션
아이템 34. int 상수 대신 열거 타입을 사용하라 - 열거 타입 : 일정 개수의 상수 값을 정의한 다음, 그 외 값은 허용하지 않는 타입 - 자바의 열거 타입은 완전한 형태의 클래스 - 생성자를 제공하지 않으므로 사실상 final - 열거 타입은 싱글턴을 일반화한 형태 - 열거 타입은 컴파일 타임 타입 안정성 제공 - 고차원 추상 개념 하나를 완벽하 표현 가능 - 열거 타입에 추상 메서드를 통해 각 상수별 클래스 몸체를 재정의 가능 - 상수별 메서드 구현을 상수별 데이터와 결합 가능 - 열거 타입 상수는 생성자에서 자신의 인스턴스를 맵에 추가할 수 없음 - 열거 타입 정적 필드 중 열거 타입 생성자에서 접근할 수 있는 것으 상수 변수 뿐 - 열거 타입 생성자에서 같은 열거타입의 다른 상수에도 접근할 ..
2023.04.06 -
5장 : 제네릭
아이템 26. 로 타입은 사용하지 말라 - 로타입은 전 코드와 호환되도록 하기 위한 궁여지책 - 오류는 가능한 발생 즉시, 이상적으로는 컴파일시 발견하는 것이 좋음 - 로타입을 쓰면 제네릭이 안겨주는 안정성과 표현력 모두 잃게 됨 - List 쓸 바에 List 쓰자 : 모든 타입을 허용한다는 것을 컴파일러에게 명확히 전달 - 어떤 타입이라도 담을 수 있는 가장 벙용적인 제네릭을 만들려면 와일드카드 타입 사용 - class 리터럴에는 로 타입을 써야함 - instanceof 연산자는 비한정적 와일드카드 타입 이외의 매개변수화 타입은 적용 불가 아이템 27. 비검사 경고를 제거하라 아이템 28. 배열보다는 리스트를 사용하라 공변 : Sub가 Super의 하위 타입이면 배열 Sub[] 는 Super[]의 하위..
2023.04.06 -
2장 : 객체 생성과 파괴
아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라 ## 정적 팩터리 메서드 장점 1. 이름을 가질 수 있음 : 반환될 객체에 특성을 쉽게 묘사 2. 호출될 때마다 인스턴스를 새로 생성하지 않아도 됨 : 같은 객체가 자주 요청되는 상황에 성능 향상 3. 반환 타입의 하위 타입 객체를 반환할 수 있음 4. 입력 매개변수에 따라 매번 다른 클래스 객체 반환 가능 5. 정적 팩터리 메서드를 작성하는 시점에서 반환할 객체의 클래스가 존재하지 않아도 됨 ## 정적 팩터리 메서드 단점 1. 정적 팩터리 메서드만 제공하면 하위 클래스를 만들 수 없음. 생성자가 private이기 때문 2. 정적 팩터리 메서드는 프로그래머가 찾기어려움. api 문서화 필수 아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라 - ..
2023.04.04 -
JdbcTemplate 사용 및 람다식으로 축약하기
이전 포스팅에서 템플릿과 콜백의 기본적인 원리와 동작방식, 만드는 방법에 대해 알아보았다. 스프링에도 JDBC를 이용하는 DAO에서 사용할 수 있도록 다양한 템플릿과 콜백을 제공한다. 스프링에서 제공하는 JDBC 코드용 기본 템플릿은 JdbcTemplate이다. 한번 사용해보자 public class UserDao { private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); } ... }update() update() 메서드는 PreparedStatementCreator타입을 콜백 받아서 사용한다. 다음과 같이 사용하..
2022.01.17 -
템플릿/콜백 패턴 예시, 익명 클래스를 람다식으로 변환
간단한 템플릿/콜백 예제를 하나 만들어보자. 파일을 하나 열어서 모든 라인의 숫자를 더한 합을 돌려주는 코드를 만들어보겠다. 우선 숫자가 담긴 numbers.txt파일을 하나 먼저 만든다. 1 2 3 4모든 라인의 숫자의 합은 10이다. numbers.txt파일의 경로를 주면 10을 돌려받는 메서드에 대한 테스트를 제작해보자 public class CalculatorTest { @Test public void sumOfNumbers() throws IOException { Calculator calculator = new Calculator(); int sum = calculator.calcSum("C:\\tobyTest\\src\\test\\java\\springbook\\callbackSample\\..
2022.01.17 -
중첩클래스와 익명 클래스로 클래스 파일 간소화
이전 포스팅에 작성한 코드들을 다시 살펴보자 public class UserDao { private DataSource dataSource; public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } public void add(User user) throws SQLException { StatementStrategy st = new AddStatement(user); jdbcContextWithStatementStrategy(st); } public User get(String id) throws SQLException { Connection c = null; PreparedStatement ps = null; R..
2022.01.17