일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- public 필드
- Switch Expressions
- 제네릭 와일드 카드
- 정렬
- System.out
- raw 타입
- junit 5
- 로컬 클래스
- 항해99
- Study Halle
- github api
- 익명 클래스
- 스파르타코딩클럽
- Effective JAVA
- Java
- 브릿지 메소드
- 함수형 인터페이스
- annotation processor
- 제네릭 타입
- System.err
- auto.create.topics.enable
- 자바스터디
- 접근지시자
- 람다식
- 바운디드 타입
- 합병 정렬
- System.in
- 프리미티브 타입
- 상속
- 자바할래
- Today
- Total
목록분류 전체보기 (272)
코딩하는 털보
package me.rockintuna.effectivejava.item;/*톱래밸 클래스는 한 파일에 하나만 */class Item25 { public static void main(String[] args) { System.out.println(Item25Other1.NAME + Item25Other2.NAME); /* class Item25Other1 { public static final String NAME = "pan"; } class Item25Other2 { public static final String NAME = "cake"; } 동일한 문장의 클래스 파일..
package me.rockintuna.effectivejava.item;/*멤버 클래스는 되도록 static 으로 만들자 */public class Item24 { private String name; /* 중첩 클래스 : 다른 클래스 안에서 정의된 클래스 중첨 클래스는 자신을 감싸는 바깥 클래스에서만 내부적으로 사용되어야 한다. 중첨 클래스 종류 - 정적 멤버 클래스 - (비정적) 멤버 클래스 - 익명 클래스 - 지역 클래스 정적 멤버 클래스를 제외한 3가지는 모두 내부 클래스(inner class) 이다. */ private String getName() { return name; } /* ..
package me.rockintuna.effectivejava.item;/*태그 달린 클래스보다는 클래스 계층구조를 활용하자 */public class Item23 { //의미와 관계없는 필드 private final String name; //특정 의미에서만 사용되는 필드 private final Integer dimensionLines; private final Integer texture; //태그 enum Type { DRAWING_2D, DRAWING_3D } //현재 인스턴스의 의미를 태그로 선택 private Type type; //태그와 상관 없이 동일한 메서드 public String getName() { ..
package me.rockintuna.effectivejava.item;/*인터페이스는 타입을 정의하는 용도로만 사용하자 */public class Item22 implements Item22Interface{ public static void main(String[] args) { //인터페이스를 구현한 클래스의 인스턴스는 그 인터페이스 타입이 된다. Item22Interface demo = new Item22(); }}interface Item22Interface { }class Item22NoConstants implements Item22InterfaceConstants { public static void main(String[] a..
package me.rockintuna.effectivejava.item;import org.apache.commons.collections4.collection.SynchronizedCollection;import java.util.ArrayList;import java.util.Collection;/*인터페이스는 구현하는 쪽을 생각해 설계하자 */public class Item21 implements Item21Interface{ public static void main(String[] args) { /* 모든 상황에 대해 불변식을 지키는 디폴트 메서드를 작성하기는 어렵다. */ Collection memberList = Synchronize..
package me.rockintuna.effectivejava.item;/*상속보다는 컴포지션을 사용하라 */public class Item18 extends Item18SuperClass { /* 내가 제어할 수 없는 다른 패키지의 상위 클래스를 상속받았을 때 문제다. 이 상위 클래스에서 상속받아 사용할 수 있는 내부 구현이 달라지는 경우, 해당 내부 구현을 사용하는 메서드에서 오류가 발생하기 쉽다. 상위 클래스 변화에 따라 하위 클래스 모두 변경해야 할 수 있다. */ @Override public String getName() { return super.getName(); } /* 상위 클래스를 완벽히 이해하지 않는이상 재정..
package me.rockintuna.effectivejava.item;import java.math.BigInteger;/*변경 가능성을 최소화하라 */public final class Item17 { /* 불변 객체 : 생성된 시점부터 파괴될 때 까지 상태가 변경되지 않는 객체 클래스를 불변으로 만들기 1. setter가 없어야함 2. 클래스를 확장할 수 없어야함 (대표적으로 final 클래스) 3. 모든 필드를 private final로 선언 4. 가변 객체를 참조하는 필드가 있다면 해당 필드를 사용하는 생성자, getter, readObject 메서드에서 방어적 복사를 한다. 불변으로 만들 수 없다면 변경할 수 있는 부분을 최소화하자 - 별다른 ..
package me.rockintuna.effectivejava.item;import java.util.List;/*public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 */public class Item16 { public List memberList; /* public class에서 public 필드를 사용하면 1. 내부 표현을 변경하려면 API가 변경되어야 한다. : public class의 public 필드 자체가 API 이면서 내부 표현이기 때문 2. 불변식을 보장할 수 없다 : 클라이언트에서 언제든지 필드의 인스턴스를 변경하거나 수정할 수 있다. 3.부수 작업을 수행할 수 없다. : 접근자 메서드에서는 부가 작업을 추가..
package me.rockintuna.effectivejava.item;import java.util.List;/*클래스와 멤버의 접근 권한을 최소화 하라*/public class Item15 { /* 정보 은닉, 캡슐화의 장점 컴포넌트들을 서로 독립시킨다. => 개발,테스트,최적화,적용,분석,수정을 개별적으로 할 수 있게 해준다. - 개발 속도 (병렬 개발) - 관리 비용 (유지보수 쉬움) - 유닛 테스트를 통한 컴포넌트 성능 최적화 - 재사용성 - 거대한 시스템 개발을 쉽게 해줌 Java의 정보 은닉 장치 [접근 제한자]를 통해 모든 클래스와 멤버의 접근성을 가능한 좁히자. public 접근 제한자 => 외부 접근을 허용한다는 것 (API)..

redis에서 서로 독립적으로 조회하는 작업을 여러 스레드로 병렬 처리하기 위해 parallelStream을 사용하였다.// Get Projectspublic List getProjects(String rootId) { RelationshipResponseDto[] relationships = service.getRelationships(rootId); List projectResponseDtoList = new ArrayList(); if (relationships != null) { Arrays.stream(hasProject).toList().parallelStream().forEach(relationshipResponseDto -> { Project project = servi..