ReflectionReflection은 구체적인 클래스 정보를 알지 못하더라도, 그 클래스의 메서드, 타입, 변수들에 접근할 수 있도록 도와주는 자바 API입니다.컴파일 시간이 아닌 실행 시간에 동적으로 특정 클래스의 정보를 추출할 수 있는 프로그래밍 기법입니다. 이는 동적 바인딩과 관련이 있습니다. Reflection은 언제 사용하나요?1. 동적으로 클래스 로드 시코드 작성 시점에는 어떤 Class를 사용해야 할지 모르지만, Runtime에 Class를 가져와서 실행해야 하는 경우입니다.대표적으로 Spring의 Annotation 기능의 Reflection을 이용하여 프로그램 실행 도중 동적으로 클래스의 정보를 가져와 사용합니다.2. 테스트 코드 작성 시private 변수를 변경하고 싶거나 privat..
프로세스와 쓰레드프로세스시스템에서 실행 중인 프로그램을 이야기합니다. 자신만의 메모리 공간을 포함한 독립적인 실행 환경을 가지고 있습니다. 우리가 사용하는 프로그램들의 일부는 여러 프로세스 간 상호 작용하는 것일 수 있습니다.JVM은 하나의 프로세스로 실행되며, 동시에 여러 작업을 수행하기 위해 멀티 쓰레드를 지원하고 있습니다. 쓰레드프로세스 안에서 독립적으로 실행되는 작은 실행 단위를 의미합니다.쓰레드는 JVM에 의해 관리되며, 프로세스에는 적어도 한 개 이상의 쓰레드가 존재합니다. Main 쓰레드 하나로 시작하여 쓰레드를 추가 생성하게 되면 멀티 쓰레드 환경이 됩니다.이러한 쓰레드는 프로세스의 리소스를 공유하기 때문에 효율적이긴 하나, 리소스 동기화와 같은 문제점이 발생합니다.JAVA의 쓰레드Java..
Objects 클래스Object 클래스와 유사한 이름을 가진 java.util.Objects 클래스는 객체 비교, HashCode 생성, null 여부, 객체 문자열 리턴 등의 연산을 수행하는 정적(static) 메서드들로 구성된 Object 클래스의 유틸리티 클래스 입니다.Objects 클래스의 메서드compare(a, b) - 객체 비교 메서드equals(), deepEquals() - 객체 동등 비교 hash(), hashCode() - 해시 코드 생성isNull(), nonNull(), requireNonNull() - null 여부 조사toString() - 객체 문자 정보 compare(T a, T b, Comparator c) : 객체 비교 메서드두 객체 a, b를 Comparator(=비..
Java Application을 개발하면서 equals()와 hashCode()를 같이 재정의 해야 한다는 말을 들어보신 적 있으신가요?대부분의 IDE(=Ecilpse, Intellij 등)에서도 equals()와 hashCode()를 같이 재정의 하도록 되어있으며, Lombok에서도 @EqualsAndHashCode을 지원하고 있습니다. 그렇다면, 왜 equals()와 hashCode()는 같이 정의해야 할까요? 천천히 알아보겠습니다.equals()만 재정의 하는 경우public class Car { private final String name; public Car(String name) { this.name = name; } // intellij Generate ..
Optional을 설명드리기 이전에 NPE(=NullPointerException)에 대해 간략히 말씀드리고 넘어가겠습니다.NPE는 Java Application을 개발하면서 자주 접하는 Exception 중 하나입니다. 이 NPE를 피하기 위해서 Null 값을 검사하는 로직을 아래와 같이 구성해야 합니다.List names = getNames();// NPE를 방지하기 위해 null 검사를 해야함if(names != null){ names.sort();} 하지만, 변수가 많아질 경우, Null을 검사해야 할 요소가 많아지기 때문에 꽤나 번거로워집니다. 이러한 불편한 점을 개선하고자 등장한 것이 Optional 클래스입니다.Optional 클래스Java8 버전 이후부터 Optional 클래스를 이용..
JDK(=Java Development Kit)란?Java Application을 개발하기 위해 필요한 도구들의 모음입니다.이는 개발자가 Java 코드를 작성하고 컴파일하여 Byte Code로 변환하는데 사용됩니다.JDK는 Java Compiler, JRE, Java Development Tools로 구성되어 있습니다. JDK는 Oracle Corporation에서 출시한 아래 Java 플랫폼들 중 하나를 구현한 것입니다.Java 플랫폼Java SE: Java Platform, Standard Edition표준 자바 플랫폼으로 표준적인 컴퓨팅 환경을 지원하기 위한 자바 가상머신 규격 및 API 집합을 포함합니다.Java EE, Java ME는 구체적인 목적에 따라서 이 Java SE를 기반으로 API 추..
JVM(=Java Virtual Machine)OS(=운영체제)에 구애 받지 않고 CPU가 자바를 인식, 실행할 수 있게 하는 일종의 가상 컴퓨터입니다.따라서, Java는 JVM으로 인해 "운영체제에 독립적이다."는 장점이 있습니다. 컴파일 과정 원시 코드(=*.java)는 CPU가 인식하지 못하기 때문에 반드시 기계어로 컴파일 해야 합니다.Java는 JVM을 거쳐 OS에 도달하기 때문에 곧바로 OS가 인식할 수 있는 기계어로 컴파일 되지 않고, JVM이 인식할 수 있는 Byte Code(=*.class)로 변환됩니다. Java compiler를 통해 변환된 Byte Code는 기계어가 아니기 때문에 OS가 해석할 수 없습니다.따라서, JVM을 통해 Byte Code를 OS가 해석할 수 있는 기계어로..
- Total
- Today
- Yesterday