💬 언어/이펙티브 자바

💬 언어/이펙티브 자바

[이펙티브 자바] Item 23 - 태그 달린 클래스보다는 클래스 계층구조를 활용하라

item 23 태그 달린 클래스보다는 클래스 계층구조를 활용하라 01. 태그 달린 클래스 태그 : 클래스가 어떤 타입인지에 대한 정보를 담고있는 멤버 변수 태그 달린 클래스는 두 가지 이상의 의미를 가질 수 있다. 현재 표현하는 의미를 태그 값으로 알려주는 클래스를 태그 달린 클래스라고 한다. 아래 BoardGame 클래스를 보면 세 가지 필드가 존재한다. gameType, cards, board 이때 BoardGame이 어떤 타입인지에 대한 정보를 갖는 "GameType"을 태그라고 한다. public class BoardGame { enum GameType { BLACKJACK, CHESS } // 태그, 사람이 어떤 게임을 갖고 있는지 private GameType gameType; // 블랙잭 게..

💬 언어/이펙티브 자바

[이펙티브 자바] Item 22 - 인터페이스 타입을 정의하는 용도로만 사용하라

Item 22 인터페이스 타입을 정의하는 용도로만 사용하라 🟧 인터페이스는 타입을 정의한다. 인터페이스를 사용하면 메서드, 필드 등을 선언해야 한다. 인터페이스를 구현하는 클래스나 객체가 반드시 가져야하는 요구사항(시그니처 및 타입)을 명시해야 한다. 이러한 용도로서 인터페이스는 타입을 정의한다 할 수 있다. 아래는 interface Move, class Piece 가 있다. Piece는 Move의 구현체로 move() 메서드의 시그니처를 가지고 메서드를 구현한다. @DisplayName("인터페이스는 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 한다.") @Test void interface_reference() { // Move를 구현한 Piece를 참조할 수 있다. final Move m..

💬 언어/이펙티브 자바

[이펙티브 자바] Item 20 - 추상 클래스보다는 인터페이스를 우선하라

Item 20 추상 클래스보다는 인터페이스를 우선하라 🟧 추상 클래스, 인터페이스 - 상속과 확장 추상 클래스 다중 상속이 불가능하다. 한 번 상속하면 이후에 확장하기 힘들다. 인터페이스 다중 상속이 가능하다. 기능을 추가하기 용이하다. 🤔 그러면 계속해서 확장가능한 인터페이스만 사용하면 되잖아 ?? (제목부터 인터페이스를 우선시하라는데 ??) 왜 그런 말이 나왔는지 일단 더 알아보자구요 ~ 🙅‍♂️ 먼저 추상 클래스와 인터페이스의 목적은 다릅니다. 🙅‍♂️ 🟧 목적이 다르고 차이점이 존재한다. 추상 클래스 상속받아 구현된 기능을 이용하고, 확장시킨다. 인터페이스 구현을 강제하기 때문에 같은 동작을 보장한다. 추상 클래스는 기존 기능을 이용해서 확장하고 인터페이스는 구현을 강제한다고..? 추상 클래스와 ..

💬 언어/이펙티브 자바

[이펙티브 자바] Item 49 - 매개변수가 유효한지 검사하라

Item 49 매개변수가 유효한지 검사하라 메서드나 생성자에 입력되는 매개변수들이 정상적인 데이터인지 검사하는 것은 중요합니다. 매개변수 검사를 제대로 하지 않는다면 다음과 같은 결과가 발생할 수 있습니다. 예상치 못한 동작이 발생할 수 있다. 잘못된 결과를 반환할 수 있다. 예외를 던지면서 애플리케이션 동작이 중단된다. 잘못될 수 있는 상황들을 예시로 보겠습니다. 🟧 예상치 못한 동작이 발생할 수 있다. 메서드는 정상적으로 실행됐으나 다른 객체를 잘못된 상태로 바꿔놓을 수 있습니다. Deck에서 카드를 뽑을 때 문제 없이 카드를 가져와야 정상적인 동작입니다. 하지만 덱을 생성할 때 빈 컬렉션이 매개변수로 들어갔습니다. Deck deck = new Deck(initData()); 아무런 문제가 없다고 생..

💬 언어/이펙티브 자바

[이펙티브 자바] Item 32 - 제네릭과 가변인수를 함께 쓸 때는 신중하라

 Item 32 제네릭과 가변인수를 함께 쓸 때는 신중하라 🟧 가변인수 (Varargs) 가변인수는 필요에 따라 매개변수의 개수를 동적으로 조정할 수 있는 기능입니다. 덕분에 varargs 메서드를 n번 오버로딩 하지않아도 됩니다. 가변인수 사용하는 방법은 타입... 매개변수명 으로 사용하면 됩니다. 가변인수는 파라미터로 넘겨진 값들을 컴파일러가 컴파일 타임에 배열을 만들어 처리해주는 방식입니다. 🟧 제네릭과 가변인수 위에서 요구사항이 들어왔습니다. "같은 타입의 데이터를 List로 반환하는 메서드를 만들어라." 기존에 만들어져 있는 Collection의 Api를 이용해도 되겠지만 직접 차근차근 구현 해보면서 제네릭과 가변인수를 사용하게 되는 과정을 보겠습니다. 버전 01. asListV1 버전 02...

💬 언어/이펙티브 자바

[이펙티브 자바] Item 26 - Raw Type은 사용하지 말라

Item 26 Raw Type을 사용하지 말라. ✅ Raw Type? Raw Type은 제네릭 타입에서 타입 파라미터를 사용하지 않은 때를 의미합니다. 오라클 공식 문서를 보면 다음과 같이 기재되어 있습니다. 4.8. Raw Types To facilitate interfacing with non-generic legacy code, it is possible to use as a type the erasure (§4.6) of a parameterized type (§4.5) or the erasure of an array type (§10.1) whose element type is a parameterized type. Such a type is called a raw type. 제네릭을 사용하지 ..

hyena0608
'💬 언어/이펙티브 자바' 카테고리의 글 목록