반응형 java33 [엘레강트 오브젝트] 2. 학습 - (2) 최소한 뭔가는 캡슐화하세요 너무 많이 캡슐화하는 방식도 좋지 않지만, 아무것도 캡슐화하지 않는 방식 또한 바람직하지 않습니다 class Year { int read() { return System.currentTimeMillis() / / (1000 * 60 * 60 * 24 * 30 * 12) - 1970; } } Year 클래스의 인스턴스는 어떤 것도 캡슐화하지 않기 때문에 이 클래스의 모든 객체들은 동일합니다 이렇게 아무것도 캡슐화하지 않는 방식은 바람직하지 않습니다 이처럼 프로퍼티가 없는 클래스는 객체지향 프로그로밍에서 악명 높은 정적 메서드와 유사합니다 아무런 상태, 식별자도 가지지 않고 오직 행동만을 포함합니다 인스턴스 생성과 실행을 엄격하게 분리하는 순수한 OOP에서는 기술적으로 프로퍼티가 없는 클래스를 만들 수 없습.. 2021. 9. 5. [이펙티브자바 3판] ITEM49. 매개변수가 유효한지 검사하라 이번장의 핵심은... 메서드나 생성자를 작성할 때면 그 매개변수들에 어떤 제약이 있을지 생각해야 한다 그 제약들을 문서화하고 메서드 코드 시작 부분에서 명시적으로 검사하자 그 노력은 유효성 검사가 실제 오류를 처음 걸러낼 때 충분히 보상받을 것이다! 유효성 검사 1. 매개변수에 대한 제약은 반드시 문서화해야하며, 유효성 검사는 메서드 몸체가 시작되기 전에 검사해야합니다 2. 오류는 가능한 한 빨리 (발생한 곳에서) 잡아야 합니다 3. 메서드 몸체가 실행되기 전에 매개변수를 확인한다면 잘못된 값이 넘어왔을 때 즉각적이고 깔끔한 방식으로 예외를 던질 수 있습니다 만약, 매개변수 검사를 제대로 하지 못하면? 메서드가 수행되는 중간에 모호한 예외를 던질 수 있습니다 잘못된 결과를 반환할 수도 있습니다 매개변수의.. 2020. 12. 19. [Java] First Class Collection(일급 컬렉션) 안녕하세요~ 잭코딩입니다! 이번에는 일급 컬렉션에 대해 글을 써보려고 합니다! 요즘 글쓴이는 우아한테크캠프 Pro라는 교육과정을 듣고 있습니다 이번 미션에서 일급 컬렉션을 적용해보라는 코드리뷰를 받아서 관련 내용을 학습할 수 있었습니다 일급 컬렉션을 쓰면 무엇이 좋은지 살펴볼까요? First Class Collection(일급 컬렉션) ? 간단히 설명하면 Collection들을 한번 Wrapping한 컬렉션입니다 예를 들어 Car라는 객체가 있습니다 public class Car { private int position; public void move(MovingStrategy movingStrategy) { if (movingStrategy.isMove()) { position++; } } public.. 2020. 12. 6. [프로그래머스] 멀쩡한 사각형 (Level 2) programmers.co.kr/learn/courses/30/lessons/62048 코딩테스트 연습 - 멀쩡한 사각형 가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을 programmers.co.kr 문제 가로 길이 W, 세로 길이 H가 주어지는데, 대각선 방향으로 잘랐을 때, 사용할 수 있는 정사각형 개수를 구하는 문제이다 (위 링크를 통해 그림참고) 해결 1차 함수로 풀었다 직사각형을 대각선으로 그으면, y = (h / w) * x 방정식이 만들어진다 대각선이 있으면 카운트할 수 없다 x를 0부터 대입했을 때, y까지만 사용할 수 있는 정사각.. 2020. 11. 10. [이펙티브자바 3판] ITEM35. ordinal 메서드 대신 인스턴스 필드를 사용하라 이번장의 핵심은... Enum API 문서를 보면 ordinal에 대해 이렇게 쓰여 있음 '대부분 프로그래머는 이 메서드를 쓸 일이 없다' 이 메서드는 EnumSet과 EnumMap 같이 열거 타입 기반의 범용 자료구조에 쓸 목적으로 설계되었다 따라서 이런 용도가 아니면 ordinal 메서드는 절대 사용하지 말자 Ordinal() 메서드 해당 상수가 그 열거 타입에서 몇 번째 위치인지를 반환하는 메서드 // ordinal 잘못 사용한 예 - 따라 하지 말것 public enum Ensemble { SOLO, DUET, TRIO, QUARTER ... public int numberOfMusicians() { return ordinal()+1; } } 동작은 하지만 유지보수가 끔찍한 코드임 상수 선언 순서.. 2020. 11. 1. [이펙티브자바 3판] ITEM34. int 상수 대신 열거 타입을 사용하라 이번장의 핵심은... 열거 타입은 확실히 정수 상수보다 뛰어나다 더 읽기 쉽고 안전하고 강력하다 대다수 열거 타입이 명시적 생성자나 메서드 없이 쓰이지만, 각 상수를 특정 데이터와 연결짓거나 상수마다 다르게 동작하게 할 때는 필요하다 드물게는 하나의 메서드가 상수별로 다르게 동작해야 할 때도 있다 이런 열거 타입에서는 switch 문 대신 상수별 메서드 구현을 사용하자 열거 타입 상수 일부가 같은 동작을 공유한다면 전략 열거 타입 패턴을 사용하자 정수 열거 패턴 자바에서 열거 타입을 지원하기 전에는 정수 상수를 한 묶음 선언해서 사용 public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 1; public static .. 2020. 10. 28. [이펙티브자바 3판] ITEM33. 타입 안전 이종 컨테이너를 고려하라 이번장의 핵심은... 컬렉션 API로 대표되는 일반적인 제네릭 형태에서는 한 컨테이너가 다룰 수 있는 타입 매개변수의 수가 고정 하지만, 컨테이너 자체가 아닌 키를 타입 매개변수로 바꾸면 이런 제약이 없는 타입 안전 이종 컨테이너를 만들 수 있음 타입 안전 이종 컨테이너는 Class를 키로 쓰며, 이런 Class 객체를 타입 토큰이라 한다 또한, 직접 구현한 키 타입도 쓸 수 있다 예) db 행(컨테이너)을 표현한 DatabaseRow 타입에는 제네릭 타입인 Column를 키로 사용할 수 있다 타입 안전 이종 컨테이너 패턴 컨테이너 대신 키를 매개변수화한 다음, 컨테이너 값을 넣거나 뺄 때 매개변수화한 키를 함께 제공하는 방법 → 제네릭 타입 시스템이 값의 타입이 키와 같음을 보장 예) 타입별로 즐겨 찾.. 2020. 10. 25. 이전 1 2 3 4 5 다음 반응형