일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 이펙티브 자바
- 운영체제
- IT
- Effective Java
- 신입사원
- 세마포어
- java
- CS
- spring
- github
- 자바
- 프로그래밍
- 깃
- 컴퓨터공학
- package-private
- 메모리
- 알고리즘
- 깃허브
- 공채
- 스터디
- 컴퓨터과학
- Public
- 뮤텍스
- OS
- 정보처리기사
- 신입
- 개발
- 디지털
- 우리카드
- 스프링
- Today
- Total
목록Java/이펙티브 자바 (23)
주니어 개발자 성장기
개요잘 설계된 컴포넌트는 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 완벽히 숨겨서 구현과 API를 깔끔히 분리한다. 컴포넌트간 통신은 오직 API를 통해서만 이루어지며 내부 동작 방식에는 전혀 관심이 없다. 이것을 정보 은닉 혹은 캡슐화라고 한다. 이것은 소프트웨어 설계의 근간이 되는 원리라고 한다. 그리고 자바에서 캡슐화를 달성하기 위해 필요한 원칙 중 하나가 바로 클래스와 멤버의 접근 권한 최소화이다. 정보 은닉의 장점 시스템 개발 속도를 높인다.→ 여러 컴포넌트를 병렬로 개발할 수 있기 때문이다.컴포넌트간에 설계된 인터페이스를 통해서 통신하기 때문에 사용하는 측과 구현하는 측 모두 인터페이스에 맞춰서 개발하면 된다. 이는 각 모듈의 동시 개발을 가능케한다.(팀 단위 개발에서 효율적)..
개요 Object에 포함되는 인터페이스는 아니지만, 널리 사용될 수 있는 인터페이스이다. Object.equals에 더해서 순서까지 비교할 수 있으며 Generic을 지원한다. CompareTo규약 반사성 대칭성 추이성 일관성 권장 compareTo가 0을 반환한다면 equals도 true를 반환하도록 구현하는 것이 좋다. BigDecimal 클래스의 경우 equals와 compareTo의 결과가 다를 수도 있도록 구현되었다. BigDecimal oneZero = new BigDecimal("1.0"); BigDecimal oneZeroZero = new BigDecimal("1.00"); System.out.println(oneZero.compareTo(oneZeroZero)); // Tree, Tre..
방어적 복사란? 개요방어적 복사(Defensive Copy)란 Java에서 불변 객체(immutable objects)에서 쓰이는 용어이다. 불변 객체는 일단 생성이 된 뒤에는 객체 내부의 상태가 변경되어서는 안된다. 그리고, 방어적 복사는 불변 객체 내부의 상태(즉, 필드)에 변경을 방지하기 위해서 사용하는 기법이라고 할 수 있다. 문제 상황다음과 같은 FooCalendar라는 클래스가 있다고 가정해보자.public final class FooCalendar { private final Date standardDate; public FooCalendar(Date date) { standardDate = date; } public Date getStandardDate() { return standardD..
구현 - 불변 객체 Cloenable은 텅 비어 있는 인터페이스지만 clone을 이용하려면 반드시 구현(implements)해주어야 한다. 그 다음 clone 메서드를 super.clone을 사용해 오버라이딩해줘야 한다. 접근 제한자는 public 으로 설정, 반환 타입은 자신의 클래스로 변경한다. Clone 규약 x.clone() != x clone 반드시 원본과 다른 인스턴스를 반환해야 한다. (레퍼런스 자체가 달라야한다.) x.clone().getClass() == x.getClass()가 반드시 true이여야 한다. 원본의 클래스와 동일한 인스턴스를 반환해야 한다. x.clone().equals(x)가 true가 아닐 수도 있다. 복사를 한 인스턴스가 원본과 달라야만 한다면 true가 아닐수도 있..
기본 구현 Object에서 기본적으로 제공하는 toString은 클래스명 + 16진수hashCode값을 반환한다. ← 그닥 유용하지 않다. 재정의 해당 데이터에 적합한 형태로 표현해주는 것이 좋다. toString에 들어가는 필드(혹은 정보)는 외부에 공개할 수 있는 데이터만 공개하는 것이 좋다. 외부에 노출 할 수없는 정보(사용자 정보)는 최대한 숨기자. Getter를 제공하여 toString에 나오는 정보를 접근 가능하게 하자. 어차피 해당 정보를 얻기 위해서 클라이언트가 정해진 포맷에 따라 toString을 파싱할 것이다. IDE나 Lombok을 사용할 수도 있지만 자동으로 생성되는 포맷이 원하는 포맷이 아닐 수도 있다. 그럴 때는 직접 정의하자. 아래와 같이 정적 팩토리 메서드로 정해진 포맷이 입..
개요equals와 hashCode는 항상 같이 구현되어야 한다. IDE, Lombok, AutoValue 등 서도 같이 구현되는 것을 전제로 한다. 일반 규약 equals 비교에 사용하는 정보가 변경되지 않았다면 hashCode는 매번 같은 값을 리턴해야 한다. (변경되거나, 애플리케이션을 다시 실행했다면 달라질 수 있다.) equals가 두 객체를 같다고 판단했다면, hashCode의 값도 같아야 한다. 두 객체에 대한 equals가 다르더라도, hashCode의 값은 같을 수 있지만 해시 테이블 성능을 고려해 다른 값을 리턴하는 것이 좋다. 제약사항 equals에서 사용한 필드들을 모두 사용해야 한다. 이렇게 해야 인스턴스 간의 차이점이 hashCode에 반영되어 다른 인스턴스가 같은 해쉬코드를 가지..