2024/04 6

[Java] 리플렉션 (Reflection)에 대하여

리플렉션이란, 간단히 말해 컴파일 시점에 타입을 결정하는 정적 언어인 Java에서, 런타임시에 구체적인 Class의 Type을 알지 못하더라도 동적으로 클래스의 메서드, 타입, 변수들에 접근하여 정보를 추출할 수 있도록 해주는 api이다. 예를들어 다음의 상황들에서 리플렉션을 사용하고 있다 Reflection의 사용Dynamic Binding: 코드에서 동적으로 Class를 사용할 때 사용Spring Framework: DI, Annotation, Test Code 작성 등에서 사용MVC: View에서 넘어오는 데이터를 객체에 바인딩할 때 사용Hibernate: @Entity 클래스에 setter가 없으면, 해당 필드에 값을 바로 주입IDE: 자동 완성 기능 Example당신은 블로그를 개발하고 있고, ..

Java 2024.04.29

[KAKAO/Python] 가장 많이 받은 선물

'''Goals- 다음 달에 선물을 가장 많이 받을 친구가 받을 선물의 수Conditions- A,B 중 다음달 누가 선물을 받는가? - 선물 주고받은 수가 다른 경우 - 둘 중, 덜 받은 사람이 다음달에 하나를 받음 - 선물 주고받은 수가 같거나 없는 경우 * 선물지수: (이번달까지) 선물 보낸 수 - 선물 받은 수 - 선물 지수가 더 큰 사람이 선물을 받음 - 선물 지수가 같다면 서로 주고받지 않음Approach- 구현- 필요 - A,B 선물을 '준' 횟수를 기록한 dict - 선물 지수 계산 - 다음달 받을 선물 개수 계산'''from collections import defaultdictdef calc_give_count..

[Java] 상속(Inheritance) & 조합 (Composition)

Java와 같은 객체 지향 프로그래밍 언어에서는 상속(Inheritance)이라는 중요한 개념이 존재한다. 상속과 조합을 비교하기 전, 먼저 상속에 대해 알아보자 Inheritance 상속이란 부모 클래스(Super Class)의 특성을 자식 클래스(Sub Class)가 물려받아 사용할 수 있도록 해주는 메커니즘이다. Java에서는 extends 키워드를 사용하여 자식 클래스가 부모 클래스를 상속할 수 있다. 상속의 특징을 통해 장단점과 사용 목적을 알아보자 Java의 상속 (Inheritance) 코드 재사용성 : 상속을 통해 동일한 속성을 가진 객체들이, 매번 동일한 필드와 메서드를 작성할 필요 없이 '부모 클래스'에 선언된 필드와 메서드를 그대로 사용하게 함으로써 코드 재사용성을 높여준다 확장 가능..

Java 2024.04.10

[Java] String Constant Pool & String.intern()

String Constant Pool String Constant Pool은 이전 글에서 짧게 다룬 적이 있다 [Java] 문자열 클래스 String Class String 클래스의 구조 String은 문자열을 내부적으로 byte[]로 저장한다. JDK 9 이전에는 char[], JDK 9부터는 메모리 효율성을 위해 byte[]로 저장하게 되었다 // String.class (Java 8) public final class Stri kdh0518.tistory.com Java에서 문자열 리터럴(그 자체로 값을 나타내는 표현)을 저장하는 독립된 영역을 'String Constant Pool'이라고 한다. 스트링 상수 풀의 특징은 다음과 같다. String Constant Pool 문자열 리터럴 인스턴스를 ..

Java 2024.04.06

[Java] Record

Record는 Java 14에서 추가된 불변 데이터 클래스로, 그 자체로 '값'을 나타내는 클래스(즉, Value Object)를 좀 더 쉽게 생성 및 수정할 수 있게 해준다. Record 도입 이전의 VO를 보고 어떤 문제를 해결하기 위해 Record가 도입되었는지를 확인해보자 Record 이전의 VO VO는 다음의 특징들을 가지고 있는 클래스를 말한다 DTO처럼 단순한 데이터들의 집합이 아닌, 객체 그 자체가 '값'을 나타낸다 반드시 불변 객체(immutable Object)로 사용해야 하기에 한번 생성한 후 수정할 수 없고, 항상 새로운 객체를 만들어야 한다 비즈니스 로직을 포함할 수 있다 (Setter와 같이 값을 수정할 수 있는 로직은 제외) VO 예시를 보자 @Getter public clas..

Java 2024.04.05

[Java] Stream

스트림(Stream)은 Java 8에서 컬랙션과 배열을 반복적으로 처리할 때 코드의 가독성을 향상시키고 병렬 처리를 쉽게 하기 위해 새로 도입된 api이다. 우리는 데이터를 처리할 때, 알고리즘 로직을 작성하기 보다는 어떤 작업을 원하는지 '선언형(Declarative)'으로 작성함으로써 보다 직관적인 코드를 작성할 수 있다. 선언형과 명령형 선언형과 명령형을 비교하여 어떤 것이 다른지 직접 코드로 비교해보자 먼저 우리가 일반적으로 사용하는 명령형 코드이다 public class Example { public static void main(String[] args) { List numbers = Arrays.asList(1, 2, 3, 4, 5); List evenNumbers = new ArrayLis..

Java 2024.04.01