본문 바로가기
728x90

분류 전체보기286

Chapter 6. 스트림으로 데이터 수집 중간 연산은 파이프라인을 구성해 스트림의 요소를 소비(consume)하지 않는다. 반면 최종 연산은 스트림의 요소를 소비해 최종 결과를 도출한다. 최종 연산은 스트림 파이프라인을 최적화해 계산 과정을 짧게 생략하기도 한다. 컬렉터란 무엇인가? 최종 연산인 collect 메서드는 Collector 인터페이스의 구현을 전달받아 스트림의 요소를 어떤 식으로 도출할지 지정한다. 예를 들어 .collect(Collectors.toList())에서 toList는 스트림을 리스트로 변환해 Collector를 반환한다. 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 // Stream interface 의 collect R collect(.. 2022. 3. 1.
String Java의 String은 두 가지 방법으로 생성할 수 있다. 하나는 new를 통한 생성이고 하나는 리터럴을 통한 생성이다. 1 2 String str1 = "hello"; // 리터럴을 사용한 생성 String str2 = new String("hello"); // new를 통한 생성 cs 이 두 방식은 겉보기에는 같지만 리터럴은 String 값이 Heap 메모리 내의 Constant Pool에 저장되어 재사용 된다는 차이가 있다. 따라서 두 방식으로 할당한 같은 문자열들을 비교하면 new 연산은 주소값이 다르기 때문에 다음과 같은 결과를 얻는다. 1 2 3 4 5 6 7 8 9 10 11 12 // 리터럴을 사용한 선언 String str1 = "hello"; String str2 = "hello"; .. 2022. 2. 26.
Item 10. equals는 일반 규약을 지켜 재정의하라 equals 메서드는 재정의하기 쉬워보이지만 잘못 정의하면 큰 문제가 된다. 따라서 문제를 회피하는 가장 쉬운 방법은 재정의를 하지 않는 거다. 그러면 euqals의 메서드 원형은 다음과 같기 때문에 자기 자신과만 같게 된다. 1 2 3 public boolean equals(Object obj) { return (this == obj); } Colored by Color Scripter cs 다음 상황 중 하나라도 해당한다면 euqlas 메서드를 재정의 하지 말라. 각 인스턴스가 본질적으로 고유하다. 각 인스턴스가 고유할 때, 즉, 각 인스턴스의 상태가 중복이 되지 않을 때는 euqals를 재정의 하지 말라. euqals는 깊은 비교를 해야 할 때 사용하라. 인스턴스의 논리적 동치성(logical eq.. 2022. 2. 24.
enum 자바 5 이전에는 enum이 존재하지 않았기 때문에 interface를 사용해 이를 대체했다. 하지만 이 방식은 다음과 같이 잘못된 연산을 할 수 있는 문제를 가지고 있었다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 interface Animal { int DOG = 1; int CAT = 2; } interface Person { int MAN = 1; int WOMAN = 2; } public class Main { public static void main(String[] args) { who(Person.MAN); // 남성 who(Animal.DOG); // 남성(잘못된 출력) } public static void who(int .. 2022. 2. 21.
728x90