일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 신입
- java
- package-private
- 디지털
- 운영체제
- Public
- 자바
- 컴퓨터공학
- 알고리즘
- Effective Java
- OS
- github
- 개발
- 스터디
- 깃허브
- 이펙티브 자바
- spring
- 메모리
- 스프링
- 정보처리기사
- 세마포어
- 우리카드
- IT
- 공채
- 신입사원
- 깃
- 컴퓨터과학
- CS
- 뮤텍스
- 프로그래밍
- Today
- Total
목록Java (30)
주니어 개발자 성장기
기본 구현 Object에서 기본적으로 제공하는 toString은 클래스명 + 16진수hashCode값을 반환한다. ← 그닥 유용하지 않다. 재정의 해당 데이터에 적합한 형태로 표현해주는 것이 좋다. toString에 들어가는 필드(혹은 정보)는 외부에 공개할 수 있는 데이터만 공개하는 것이 좋다. 외부에 노출 할 수없는 정보(사용자 정보)는 최대한 숨기자. Getter를 제공하여 toString에 나오는 정보를 접근 가능하게 하자. 어차피 해당 정보를 얻기 위해서 클라이언트가 정해진 포맷에 따라 toString을 파싱할 것이다. IDE나 Lombok을 사용할 수도 있지만 자동으로 생성되는 포맷이 원하는 포맷이 아닐 수도 있다. 그럴 때는 직접 정의하자. 아래와 같이 정적 팩토리 메서드로 정해진 포맷이 입..
개요equals와 hashCode는 항상 같이 구현되어야 한다. IDE, Lombok, AutoValue 등 서도 같이 구현되는 것을 전제로 한다. 일반 규약 equals 비교에 사용하는 정보가 변경되지 않았다면 hashCode는 매번 같은 값을 리턴해야 한다. (변경되거나, 애플리케이션을 다시 실행했다면 달라질 수 있다.) equals가 두 객체를 같다고 판단했다면, hashCode의 값도 같아야 한다. 두 객체에 대한 equals가 다르더라도, hashCode의 값은 같을 수 있지만 해시 테이블 성능을 고려해 다른 값을 리턴하는 것이 좋다. 제약사항 equals에서 사용한 필드들을 모두 사용해야 한다. 이렇게 해야 인스턴스 간의 차이점이 hashCode에 반영되어 다른 인스턴스가 같은 해쉬코드를 가지..
개요 Effective final 이란 사실상 final을 의미한다. 자바 8부터 추가된 기능이다. 우리가 어떤 변수(레퍼런스 타입이든 원시 타입이든)의 선언이나 매개변수 앞에 final 키워드를 사용하면 변경이 불가능하다. 사실상 final은 변수가 선언된 뒤에 변경되지 않는다면 final 변수로 취급하는 것이다. 그렇다면 과연 이 Effective final이라는 기능이 왜 필요할까? 로컬 클래스, 익명 클래스, 람다 로컬 클래스, 익명 클래스와 람다는 외부에서 변수를 참조하기 위해서는 반드시 final 변수여야 컴파일 에러가 발생하지 않는다. public void method() { final int number = 10; // 로컬 클래스 class Local { public void someth..
개요Arrays.stream()은 자바 8버전부터 추가된 것으로 매개변수로 배열 하나를 받는다. double[], int[], long[]를 매개 변수로 줄 경우 각 각 DoubleStream, IntStream, LongStream을 반환해준다. 위에 언급된 타입을 제외하고도 특정 타입 T의 배열 T[]를 매개 변수로 지정하면, Stream를 반환한다. DoubleStream IntStream LongStream일반 Stream와 같이 여러가지 메서드를 사용할 수 있으며 다음과 같은 메서드도 사용할 수 있다. sum max min average forEach toArray map, mapToInt, mapToLong, mapToDouble, mapToObj 참고로, primitive type으로 배열을..
개요 함수형 인터페이스란? 인터페이스인데 추상 메서드가 딱 하나만 존재하는 것. @FunctionalInterface 어노테이션을 사용해서 컴파일러의 도움을 받고 함수형 인터페이스임을 명시하는것이 좋다. 참고로 인터페이스에서는 추상 메서드에 abstract 키워드를 생략해도 된다. 실제 사용자바에서 기본적으로 제공하는 함수형 인터페이스가 많으므로 구현하기 전에 자신에게 맞는 것이 있는지 먼저 살펴보자! Function T 타입을 매개변수로 받아 R타입을 리턴하는 함수형 인터페이스 compose, andThen 메서드로 다른 Function 인스턴스와 조합이 가능하다. Consumer T타입을 매개변수로 받아 리턴이 void인 함수형 인터페이스 Supplier 아무런 매개변수가 없고 T타입을 리턴하는 함수..
3장 Object는 객체를 만들 수 있는 구체 클래스지만 기본적으로는 상속해서 사용하도록 설계되었다. Object에서 final이 아닌 메서드(equals, hashCode, toString, clone, finalize)는 모두 재정의(overriding)를 염두에 두고 설계된 것이라 재정의 시 지켜야 하는 일반 규약이 명확히 정의되어 있다. 일반 규약에 맞게 해당 메소드를 overriding 해야 일반 규약을 활용하는 클래스들(HashMap, HashSet)이 오동작하지 않게 된다. finalize는 이전 장에서 다루었으므로 더이상 언급하지 않는다. 개요equals 메서드는 overriding하기 쉬워 보이지만 곳곳에 함정이 있으므로 필요하지 않은 경우 overriding하지 않는 것이 최선이다. 그..