profile
BE Developer
post-thumbnail

[Effective Java] 아이템 34 : int 상수 대신 열거 타입을 사용하라

열거 타입이란, 일정 개수의 상수 값을 정의한 다음 그 외의 값은 허용하지 않는 타입이다.열거 타입이 생기기 이전에는, 다음 코드처럼 상수를 한 묶음 선언해서 사용하고는 했다.▶️ 정수 열거 패턴1) 타입 안전을 보장할 방법이 없으며 표현력도 좋지 않다.오렌지를 건네야

2일 전
·
0개의 댓글
·
post-thumbnail

[Effective Java] 아이템 32 : 제네릭과 가변인수를 함께 쓸 때는 신중하라

가변인수(varargs) 메서드(아이템 53)란, 메서드에 넘기는 인수의 개수를 클라이언트가 조절할 수 있게 하는 것이다. 제네릭과 같이 자바 5때 함께 추가되었다. 하지만, 가변인수 메서드를 호출하면 가변인수를 담기 위한 배열이 자동으로 만들어지는데 이 때 vara

3일 전
·
0개의 댓글
·
post-thumbnail

[Effective Java] 아이템 31 : 한정적 와일드카드를 사용해 API 유연성을 높이라

매개변수화 타입은, 서로 다른 타입 Type1과 Type2가 있을 때 List이 List의 하위 타입도 상위 타입도 아닌 "불공변(invariant)" 이다. List은 문자열만, List는 어떤 객체도 넣을 수 있으니 후자가 하는 일을 제대로 수행하지 못해 당연히

2022년 8월 6일
·
0개의 댓글
·
post-thumbnail

[Effective Java] 아이템 30 : 이왕이면 제네릭 메서드로 만들라

클래스와 마찬가지로, 메서드도 제네릭으로 생성할 수 있다. 대체로 매개변수화 타입을 받는 정적 유틸리티 메서드는 보통 제네릭이다. ex)Collections의 알고리즘 메서드 🔗 제네릭 메서드 작성법 제네릭 메서드 작성법은 제네릭 타입 작성법과 비슷하다. 다음은 두

2022년 8월 6일
·
0개의 댓글
·
post-thumbnail

[Effective Java] 아이템 29 : 이왕이면 제네릭 타입으로 만들라

일반 클래스를 제네릭 클래스로 만드는 방법은 다음과 같다. > 1) 클래스 선언에 타입 매개변수를 추가한다 ( 타입 이름 : E ) 2) 코드에 쓰인 Object를 적절한 타입 매개변수로 바꾼다 예시를 통해 제네릭 타입으로 변환하는 방법을 알아보자. ▶️ Obje

2022년 8월 6일
·
0개의 댓글
·
post-thumbnail

[Effective Java] 아이템 28 : 배열보다는 리스트를 사용하라

📚 공변(covariant)함께 변한다는 것배열은 공변이여서 Sub가 Super의 하위 타입이라면 Sub\[] 또한 Super\[]의 하위 타입이 된다.반면, 제네릭은 불공변(invariant)이기 때문에 서로 다른 타입 Type1과 Type2가 있을 때 List&l

2022년 7월 29일
·
0개의 댓글
·
post-thumbnail

[Effective Java] 아이템 27 : 비검사 경고를 제거하라

제네릭을 사용하면서 마주칠 수 있는 컴파일러 경고들은 다음과 같다. 이 중 비검사 경고는 제일 쉽게 제거 가능하기 때문에, 🌟할 수 있는 한 모든 비검사 경고를 제거해야 한다.비검사 경고, 비검사 메서드 호출 경고, 비검사 매개변수화 가변인수 타입 경고, 비검사 변환

2022년 7월 29일
·
0개의 댓글
·
post-thumbnail

[Effective Java] 아이템 26 : 로 타입은 사용하지 말라

제네릭 클래스 혹은 인터페이스란, 클래스와 인터페이스 선언에 타입 매개변수가 쓰인 것을 말한다. 각각의 제네릭 타입은 일련의 매개변수화 타입을 정의한다. 📚 제네릭 형식클래스/인터페이스 이름<실제 타입 매개변수>제네릭 타입을 하나 정의하면, 그에 딸린 로 타입(

2022년 7월 29일
·
0개의 댓글
·
post-thumbnail

[Effective Java] 아이템 25 : 톱 레벨 클래스는 한 파일에 하나만 담으라

소스 파일 하나에 톱 레벨 클래스를 여러개 선언하는 것은, 심각한 위험을 감수해야 하는 행위이다. 한 클래스를 여러 가지로 정의할 수 있으며, 그 중 어느 것을 사용할지는 어느 소스를 먼저 컴파일하느냐에 따라 달라지기 때문이다. 구체적인 예시를 들어보자. ▶️ 두

2022년 7월 23일
·
0개의 댓글
·
post-thumbnail

[Effective Java] 아이템 24 : 멤버 클래스는 되도록 static 으로 만들어라

1️⃣ 중첩 클래스 중첩 클래스(nested class)란, 다른 클래스 안에 정의되어 자신을 감싼 바깥 클래스에서만 쓰여야 하는 클래스를 의미한다. > 📚* 중첩 클래스 종류* 정적 멤버 클래스, (비정적)멤버 클래스, 익명 클래스, 지역 클래스 👉 이번 아이

2022년 7월 23일
·
0개의 댓글
·
post-thumbnail

[Effective Java] 아이템 22 : 태그 달린 클래스보다는 계층 구조를 활용하라

1️⃣ 태그 달린 클래스 태그 달린 클래스란, 두 가지 이상의 의미를 표현 가능할 때, 그중 현재 표현하는 의미를 태그 값으로 알려주는 클래스이다. 아래 예시를 보자. ▶️* 태그 달린 클래스 - 클래스 계층구조보다 훨씬 나쁨* 🔗 태그 달린 클래스 단점 우선,

2022년 7월 23일
·
0개의 댓글
·
post-thumbnail

[Effective Java] 아이템 22 : 인터페이스는 타입을 정의하는 용도로만 사용하라

인터페이스는 자신을 구현할 클래스의 인스턴스를 참조할 수 있는 을 한다. 즉, 클래스가 어떤 인터페이스를 구현한다는 것은 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에 얘기해주는 것이다. 하지만 위의 용도로만 사용해야 한다는 지침에 맞지 않는 예로, 상수 인터

2022년 7월 16일
·
1개의 댓글
·
post-thumbnail

[Effective Java] 아이템 21 : 인터페이스는 구현하는 쪽을 생각해 설계하라

1) Default Method 자바 8 이전에는 기존 구현체를 깨뜨리지 않고는 인터페이스에 메서드를 추가할 방법이 없었지만, 자바 8부터는 디폴트 메소드 를 통해 인터페이스에 메서드를 추가하는 것이 가능해졌다. 🔗 Default 메서드 문제점 1️⃣하지만 디폴트

2022년 7월 16일
·
0개의 댓글
·
post-thumbnail

[Effective Java] 아이템 20 : 추상 클래스보다는 인터페이스를 우선하라

🔗 자바는 1)인터페이스와 2)추상 클래스 두가지를 통해 다중 구현 메커니즘 을 제공하고 있다.둘의 가장 큰 차이는 추상 클래스가 정의한 타입을 구현한 클래스는 반드시 추상 클래스의 하위 클래스가 되어야 한다는 점이다.(단일 상속으로 인해 새로운 타입 정의하는데 제약

2022년 7월 8일
·
0개의 댓글
·
post-thumbnail

[Effective Java] 아이템 19 : 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라

상속을 고려한 설계와 문서화란 정확히 무엇을 뜻하는지 알아보자. 상속을 위한 좋은 설계란? 1️⃣ 먼저, 상속용 클래스는 재정의할 수 있는 메서드들을 내부적으로 어떻게 이용하는지(자기사용) 문서로 남거야 한다. 즉, 공개된 메서드에서 호출되는 자신의 또 다른 메서드가

2022년 7월 8일
·
0개의 댓글
·
post-thumbnail

[Effective Java] 아이템 18 : 상속보다는 컴포지션을 사용하라

1️⃣ 상속의 위험성 👉상속(클래스가 다른 클래스를 확장) 은 코드를 재사용하는 강력한 수단이지만, 다른 패키지의 구체 클래스를 상속하는 일은 위험하다. 메서드 호출과 달리 상속은 캡슐화를 깨뜨린다. 즉, 릴리스마다 내부 구현이 달라질 수 있는 상위 클래스로 인해

2022년 7월 1일
·
0개의 댓글
·
post-thumbnail

[Effective Java] 아이템 17 : 변경 가능성을 최소화하라

불변 클래스란, 🌟인스턴스의 내부 값을 수정할 수 없는 클래스이며 불변 인스턴스에 간직된 정보는 고정되어 객체가 파괴되는 순가까지 절대 달라지지 않는다. ex) 자바 플랫폼 라이브러리의 String, BigInteger, BigDeciaml, 기본 타입의 박싱된 클

2022년 7월 1일
·
0개의 댓글
·
post-thumbnail

[Effective Java] 아이템 16 : public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라

▶️ 퇴보한 클래스 예시 해당 클래스는, 데이터 필드에 직접 접근할 수 없으니 캡슐화의 이점을 제공하지 못한다.(아이템 15) 또한 API를 수정하지 않고는 내부 표현을 바꿀 수 없고, 불변식 보장도 힘드며 외부에서 필드에 접근할 때 부수 작업을 수행할 수도 없다.

2022년 6월 25일
·
0개의 댓글
·
post-thumbnail

[Effective Java] 아이템 15 : 클래스와 멤버의 접근 권한을 최소화하라

잘 설계된 컴포넌트는, 🌟모든 내부 구현화 데이터 정보를 외부로부터 완벽히 숨겨, 구현과 API를 깔끔하게 분리🌟한다. 오직 API를 통해서만 다른 컴포넌트와 소통하며 서로의 내부 동작 방식에 개의치 않는 이 개념을, 바로 정보 은닉(캡슐화) 라고 한다. 🔗 정

2022년 6월 25일
·
0개의 댓글
·