[Java] Reflection 이란?
2022. 8. 15. 00:09
Java
Reflection 런타임에 메서드, 클래스 및 인터페이스의 동작을 검사하거나 수정하는 데 사용되는 API 구체적인 클래스 타입을 알지 못해도 클래스의 이름만으로 메소드, 필드에 접근할 수 있다. API 라고 해서 사용 방법을 알아야할까? 라는 생각이 들어서 검색해보았는데 성능 및 디버깅 이슈로 개발자가 직접 Reflection 을 구현하는 경우는 드물다고 한다. (참고) https://kmongcom.wordpress.com/2014/03/15/자바-리플렉션에-대한-오해와-진실/ Why? 그렇다면 왜 Reflection 에 대해서 알아야할까? 답은 스프링 프레임워크에서 이미 우리가 Reflection 을 사용하고 있기 때문이다. Java 는 컴파일 시점에 타입을 결정하는 정적 타입 언어다. 개발자가 변..
[Java] static 키워드 알아보기
2022. 7. 18. 21:34
Java
static(정적) 이란? Java에서 static 키워드는 변수, 메소드, 블록 및 중첩 클래스에 사용할 수 있다. 정적 키워드가 붙은 멤버들은 인스턴스(객체)가 아니라 타입 자체에 속하는데, 이는 정적 멤버들의 인스턴스는 하나만 생성되며 해당 클래스의 모든 인스턴스에서 공유된다는 것을 의미한다. 따라서 각 인스턴스들이 공통적으로 같은 값을 유지해야하는 경우 사용된다. Java8 이후 Static Object는 heap 영역에서 관리되며, 참조를 잃은 정적 오브젝트는 GC 대상이 될 수 있다. (참고) https://jgrammer.tistory.com/144 The static Fields (Or Class Variables) 정적 필드 (또는 클래스 변수) static 필드를 선언하면 해당 필드는 ..
[Java8] 비동기 처리 CompletableFuture
2022. 6. 17. 18:40
Java
CompletableFuture 함수형 프로그래밍 방식을 지원하는 비동기 병렬 프로그래밍 기법 명시적 Thread Pool 선언이 필요없음 함수형 프로그래밍 방식 지원 간결한 코드, 높은 가독성 각 병렬 Task 들의 손쉬운 결합, 예외처리 지원 supplyAsync(), runAsync() CompletableFuture 는 메소드를 제공하여 직접 thread를 생성하지 않고 작업을 async로 처리할 수 있다. runAsync(): 반환 값 X static CompletableFuture runAsync(Runnable runnable) supplyAsync(): 반환 값 O static CompletableFuture supplyAsync(Supplier supplier) 예제 수행하는데 각각 3초..
[Java] Sync vs. Async / Blocking vs. Non-Blocking
2022. 6. 14. 01:40
Java
Sync 와 Async 에 대한 이해 동기란 어떠한 일이 동시에 일어남을 뜻한다. 우리가 실생활에서 많이 사용하는 'A와 B를 동기화하다' 와 같이, 동기는 A와 B를 동시에 같은 상태로 만든다는 의미를 가지고 있다. 즉, 두 상태를 일치시킨다는 뜻이다. 아래와 같이 동기식으로 동작하는 예제를 보자. public class test { public static void main(String[] args) { System.out.println(method1()); System.out.println(method2()); } public static int method1() { return 1; } public static int method2() { return 2; } } method1이 실행되고 완료가 ..
[Java] Builder Design Pattern 빌더 패턴
2022. 2. 20. 01:11
Java
안녕하세요. 오늘은 Effective Java 에 소개 된 빌더 패턴에 대해 정리해보겠습니다. 점층적 생성자 패턴 사용자의 정보를 이용한 프로그램을 만든다고 가정 해보자. 요구되는 사용자의 정보는 시퀀스(PK), 이메일, 패스워드,계정 생성일자 등등..일 것이다. 이러한 정보를 담은 사용자 Entity는 PK와 이메일을 가져오는 사용자 목록 조회성 화면이나 이메일, 패스워드를 입력받는 가입 화면 등에 사용된다. 이처럼 서비스마다 사용하는 매개변수가 다르기때문에 개발자는 아래와 같이 매개변수를 늘려가며 생성자를 만들게 된다. public class UserSample { private Long seq; private String email; private String passwd; private Strin..
Java 17, 무엇이 바뀌었을까?
2021. 10. 25. 23:33
Java
9월 14일 오라클은 Java 17을 릴리즈했다. Java 8, 11에 이은 LTS(Long-Term Support) 버전으로 오라클은 2년마다 LTS 버전을 릴리즈하고 있다. 이번 토이 프로젝트에 사용하기 위해 몇 가지 변경 사항을 정리해보려고 한다. 참고1) non-LTS 버전들은 다음 버전이 릴리즈되면 지원이 종료된다. 예를 들어, Java 13이 릴리즈되면 Java 12에 대한 지원이 종료되는 것이다. 참고2) https://zdnet.co.kr/view/?no=20181102140004 오라클은 특정시점 이후부터 공식 기술지원을 종료한다. 이를 ‘엔드오브퍼블릭업데이트(EOPU)’라 부른다. EOPU 이후 JDK 버전별 패치는 유상 유지보수 계약을 체결한 상용 라이선스 보유자에게만 제공된다. 결론..
[Java] equals(), hashCode(), == 연산자 정리
2021. 6. 28. 23:06
Java
안녕하세요. 오늘은 자바의 자료형과 == 연산자, equals(), hashCode() 에 대해 정리해보겠습니다. Java Data Type 기본 자료형 자바 컴파일러에 의해 해석되는 자료형 실제 값을 갖는 자료형 자바에서 여러 형태의 타입을 미리 정의하여 제공 참조 자료형 값이 아닌 객체의 주소를 가지고 있는 자료형 == 연산자 피연산자가 primitive type일 때는 값이 같은지 비교하고, reference type일 때는 가리키는 주소가 같은지 검사한다. 아래 그림을 보면 "값이 같은지, 주소가 같은지 검사"한다는 것이 결국 해당 변수의 값을 비교하는 것임을 알 수 있다. equals() public static boolean equals(byte[] value, byte[] other) { i..
[Java8] 자바 스트림 Java Stream API
2021. 6. 1. 13:23
Java
Stream이란? A sequence of elements supporting sequential and parallel aggregate operations 순차, 병렬 집계 작업을 지원하는 요소 컬렉션, 배열 등의 저장 요소를 하나씩 참조하여 반복적으로 처리할 수 있도록 해주는 인터페이스 데이터소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메서드들이 정의되어 있습니다. 간단하게 병렬 처리가 가능하여 많은 요소들을 빠르게 처리할 수 있습니다. * 추상화 -> 어떤 데이터든 같은 방식으로 다룰 수 있게 하는 것, 재사용성이 높아짐 자바8 이전에는 컬렉션, 배열 인스턴스의 데이터를 for, if 문을 통해 처리했습니다. 이러한 경우 로직이 복잡해질수록 코드의 가독성이 떨어지게 됩니다. 순회를 위한 f..