JAVA 47

[JAVA] 리플렉션

리플렉션이란?구체적인 클래스 타입을 알지 못해도 그 클래스의 메서드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API이다. 리플렉션이 어떤 경우에 사용될까?코드를 작성할 시점에 어떤 타입의 클래스를 사용할지 모르지만, 런타임 시점에 지금 실행되고 있는 클래스를 가져와서 실행해야 하는 경우 사용된다.프레임워크나 IDE에서 이런 동적인 바인딩을 이용한 기능을 제공합니다. intelliJ의 자동완성 기능, 스프링의 어노테이션이 리플렉션을 이용한 기능이라 할 수 있습니다.  클래스와 메타데이터 클래스가 제공하는 다양한 정보를 동적으로 분석하고 사용하는 기능을 리플렉션 (Reflection)이라 한다.리플렉션을 통해 프로그램 실행 중에 클래스, 메서드, 필드 등에 대한 정보를 얻거나, 새로운 객체를 생성하고..

JAVA 2024.11.27

[JAVA] 자원 정리 (try-catch , try-with-resources) 2

네트워크 프로그램 4 - 자원 정리 1 자원정리를 네트워크 프로그램에 도입해서, 네트워크 프로그램이 안전하게 자원을 정리하도록 개발해 보다.먼저 ` finally ` 를 사용해서 자원을 정리해 보고, 이후에 참 ` try-with-resources ` ` 를 도입해 보자.try-with-resources  항상 사용할 수 있는 것은 아니고 finally에서 직접 자원을 정리하는 경우가 많이 있다.  우선 소켓과 스트림을 종료하기 위해 간단한 유틸리티 클래스를 생성하자package thread.control.network.tcp;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.So..

JAVA 2024.11.26

[JAVA] 자원 정리 (try-catch , try-with-resources)

자원 정리 1 자원 정리를 이해하기 위해 간단한 예제 코드를 만들어보자package thread.control.network.tcp.autocloseable;public class CallException extends Exception{ public CallException(String message) { super(message); }} package thread.control.network.tcp.autocloseable;public class CloseException extends Exception{ public CloseException(String message) { super(message); }} package thread.control.ne..

JAVA 2024.11.26

[JAVA] 싱글톤 구현 방식

싱글톤의 여러가지 구현 방식과 주의점을 알아보자. 싱글톤 패턴이란?인스턴스를 오직 한 개만 제공하는 클래스입니다. 시스템 런타임, 환경 세팅에 대한 정보 등, 인스턴스가 여러 개 일 때 문제가 생길 수 있는 경우가 있다. 인스턴스를 오직 한개만 만들어 제공하는 클래스가 필요하다. 싱글톤 구현 방식 1. private 생성자 및 static 메서드 사용public class Settings { private static Settings instance; // 클래스 밖에서 인스턴스 생성 방지 private Settings(){} public static Settings getInstance(){ if(instance == null) { return in..

JAVA 2024.11.21

[JAVA] iterator 순회 중 만난 ConcurrentModificationException

collection 순회하는 loop 내에서 원본 collection에 변화를 주면 어떤 일이 발생할까? 다음 코드를 실행해보자!package generic.ex1;import java.util.*;import java.util.concurrent.CopyOnWriteArrayList;public class RawTypeMain { public static void main(String[] args) { // List list2 = new CopyOnWriteArrayList(); List list2 = new ArrayList(); list2.add("A"); list2.add("B"); list2.add("C"); list2...

JAVA 2024.11.20

유니코드, UTF-8, 직렬화

1. 유니코드 (Unicode):유니코드는 전 세계의 문자에 대해 고유한 숫자 코드(코드 포인트)를 할당하는 문자 집합입니다.예를 들어, 한글 "가"는 U+AC00이라는 코드 포인트를 가지고 있습니다.유니코드는 문자와 코드 포인트를 1:1로 매핑한 코드표입니다. 즉, 유니코드는 "문자"를 숫자로 표현하는 시스템입니다.public class UnicodeExample { public static void main(String[] args) throws Exception { String text = "가"; // "가"의 유니코드 값 확인 int unicodeValue = text.codePointAt(0); System.out.print..

JAVA 2024.11.18

[JAVA] String intern()

String의 intern() 메서드에 대해 공부하다 보면 "절대 쓰지 말라"는 권고를 접할 수 있습니다.intern()은 힙 영역에 생성된 String 객체를 String Constant Pool로 옮겨 메모리를 절약하고 중복을 줄이기 위한 메서드지만, 잘못 사용하면 성능 문제가 발생할 수 있습니다. String Constant Pool 은 자바 7 이후에  메서드 영역에서 힙 영역으로 옮겨졌습니다. 즉 GC 의 대상이 된다는 것입니다.  intern() 메서드를 사용할 때 발생할 수 있는 문제점 Full GC 발생 가능성 증가로 인한 성능 저하객체는 처음 생성 시 에덴 영역에 할당되고, 참조되지 않으면 Minor GC에서 쉽게 수거됩니다. 하지만 intern()으로 객체를 String Constant..

JAVA 2024.11.15