☕️ Java

🧐 Lombok Getter Recored Style @Accessors(fluent = true) 와 @Getter를 사용합니다. @Accessors(fluent = true) @Getter @RequiredArgsConstructor public class Member { private final String name; } class MemberTest { @Test void test() { // given Member mallang = new Member("mallang"); // when String name = mallang.name(); // then assertThat(name).isEqualTo("mallang"); } }
🧐 Varargs가 없었을 때 Varargs(이하 가변인수)가 없었을 때에는, 임의의 수의 값을 파라미터로 사용하는 메서드를 사용하기 위해서는 배열을 사용하여야 했습니다. 예를 들어 다음과 같습니다. public static void main(String[] args) { final Object[] objects = { new Date(), "안녕하세요", 24, "살 말랑이입니다." }; printSequence(objects); } public static void printSequence(Object[] args) { for (int i = 0; i < args.length; i++) { System.out.println("[" + i + "] : " + args[i]); } } 그러나 매번 배열을..
🧐 Collectors.toMap이 뭔가요? Stream을 사용하는 경우, 최종 연산으로 collect()를 사용하는 경우, Stream의 요소들을 수집하여 특정한 자료구조로 변환할 수 있습니다. 이때 Map으로 변환하기 위해서는 Collectors.toMap을 사용합니다. 흔히 사용하는 toMap은 다음과 같습니다. List strings = Arrays.asList("apple", "banana", "pear"); Map map = strings.stream() .collect(Collectors.toMap(String::length, Function.identity())); System.out.println(map); // 결과: {4=pear, 5=apple, 6=banana} 그러나 위 코드에는..
🧐 Comparable Comparable은 다음과 같은 인터페이스입니다. public interface Comparable { public int compareTo(T o); } Comparable은 이를 구현한 객체에 자연적인 순서(natural order)가 있음을 의미하며, 그러한 순서에 따라 정렬등을 할 수 있도록 해줍니다. Comparable은 수많은 API에서 활용되며, 단지 이를 구현함으로써 그러한 수많은 API의 기능들을 사용할 수 있게 됩니다. 대표적으로는 Collections.sort 메서드가 있습니다. public static
🧐 리터럴과 클래스 리터럴 리터럴(Literal)은 소스 코드 상에 직접적으로 나타나는 데이터 값 그 자체를 의미합니다. 예를 들어, 정수형 리터럴은 23과 같이 숫자로 이루어진 값이며, 문자열 리터럴은 "hello world"와 같이 따옴표로 감싸진 문자열 값입니다. 클래스 리터럴은 클래스의 이름을 참조하는 방식으로 사용됩니다. 예를 들어, String.class와 같이 클래스 이름 뒤에 .class를 붙여서 사용됩니다. 그리고 이러한 클래스 리터럴의 타입은 Class 입니다. 예를 들어 String.class의 타입은 Class, Integer.class의 타입은 Class인 것입니다. final Class stringClass = String.class; final Class integerClass..
해당 챕터를 이해하기 위해서는 우선 변성(Variance)에 대한 이해가 필요합니다. 🧐 변성에 대하여 변성의 종류에는 공변성(Covariance)과, 반공변성(Contravariance), 무공변성(Invariance)이 있습니다. 이들을 타입 시스템에서 매우 중요한 개념으로, 간단하게 정리하면 아래와 같습니다. 📕 공변성(Covariance) 공변성은 부모 클래스의 타입을 자식 클래스의 타입으로 대체할 수 있는 성질을 의미합니다. S가 T의 하위 타입일 때, I 역시 I의 하위 타입인 경우 이를 공변성을 가진다고 합니다. 공변의 예시로는 자바에서의 배열과, 메서드 반환 타입이 있는데요, 이들을 각각 살펴보도록 하겠습니다. 배열은 공변이므로, 위와 같은 코드가 오류가 발생하지 않고 잘 실행되는 것을 알..
객체를 복사하는 방법에는 크게 얕은 복사와 깊은 복사, 그리고 방어적 복사가 있습니다. 이러한 방법들이 각각 어떻게 동작하는지, 어떤 상황에서 사용하는 것이 적절한지 알아보도록 하겠습니다. 🧐 얕은 복사 얕은 복사(shallow copy)는 객체를 복사할 때, 객체의 주소 값만을 복사하는 방식입니다. 이 방식은 객체의 내부에 다른 객체를 참조하는 포인터가 있을 경우, 참조된 객체를 새로 복사하지 않습니다. 따라서, 복사된 객체와 원본 객체는 같은 객체를 참조하게 되어, 하나의 객체를 수정하면 다른 객체에도 영향을 미칩니다. 자바에서는 = 연산자를 쓰면 얕은 복사가 수행됩니다. 예시를 위해 다음과 같이 클래스들을 정의하겠습니다. public class Name { private final String va..
🧐 불변 클래스? 불변 클래스란 해당 인스턴스 내부의 값을 수정할 수 없도록 구현된 클래스입니다. 불변 인스턴스에 설정된 정보는 객체 생성 시점에 고정되어, 해당 객체가 제거되는 순간까지 절대 달라지지 않습니다. 흔히 사용하는 불변 클래스로는 private 타입을 박싱한 클래스들(Integer, Double 등)과 String, BigInteger, BigDemical 등이 있습니다. 불변 클래스는 가변 클래스보다 오류가 생길 여지도 적고, 훨씬 안전하게 사용할 수 있습니다. 🧐 불변 클래스는 어떻게 만들지? 다음과 같은 규칙들을 통해 불변 클래스를 만들 수 있습니다. 객체의 상태를 변경하는 메서드(setter 등)를 제공하지 않습니다. 클래스를 확장할 수 없도록 합니다. 모든 필드를 final로 선언합..
말 랑
'☕️ Java' 카테고리의 글 목록