[JAVA] 예외(Exception)
·
JAVA
오류와 예외 오류(Error)는 예상하지 못한 비정상적인 상황 (시스템 레벨에 발생한 심각한 수준) 예외는 발생할 상황을 미리 예측하여 처리하는 상황 (개발자가 구현한 로직에서 발생) Exception 개념 및 설명 Throwable : JAVA 언어의 모든 오류 및 예외의 슈퍼클래스 Error : Throwable의 하위클래스, 응용프로그램의 심각한문제를 나타냄 Exception : 응용프로그램이 catch 할 수 있는 조건을 나타내는 Throwable 형식 Exception은 처리 방식에 따라서 Checked Exception과 UncheckedException(Runtime Exception)으로 분류됨 Checked Exception / Unchecked(Runtime) Exception Chec..
[JAVA] 싱글턴 패턴
·
JAVA
정의 및 특징 객체의 인스턴스가 오직 1개로만 만들어져서 공유하는 패턴 하나의 인스턴스를 메모리에 등록해서 여러 스레드가 동시에 해당 인스턴스를 공유하여 사용하게끔 할 수 있어서, 요청이 많은 곳에서 사용하면 효율을 높임 (전역으로 사용되는 인스턴스이기 때문) 싱글턴을 만들때 동시성(Concurrency) 문제를 고려해야함 내부 상태를 변경하기가 어려움 (상태 넣기가 어려움) 싱글턴 패턴 구현 싱글턴패턴 기본구현은 static영역에 객체 instance를 미리 하나 올려서 getInstance() 메서드를 통해서만 조회할 수 있게 구현을 하며, 생성자를 private으로 막아 new 키워드로 객체인스턴스를 생성못하게 막음, 그외 구현 방식은 여러가지가 있음 싱글턴 패턴 구현 방법 Eager Initial..
[JAVA] JVM 구조
·
JAVA
JVM 정의 자바 가상머신, 자바 바이트 코드를 실행하는 주체, 어떠한 운영체제에서 독립적으로 실행 가능 자바 바이트 코드를 인터프리터와 JIT컴파일러를 통해 변환하여 실행함 JRE 정의 자바 애플리케이션을 실행할 수 있도록 구성된 배포판 JVM과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스파일을 가지고 있음 JDK 정의 JRE + 개발에 필요한 툴 오라클은 자바 11부터 JRE를 따로 제공하지 않고 JDK만 제공함 JVM 구성 Class Loader Execution Engine Garbage Collector Runtime Data Area Class Loader 자바파일을 컴파일하면 클래스파일(바이트 코드)이 생성되고, 클래스 파일들을 엮어 Runtime Data Ar..
[JAVA] Enum
·
JAVA
정의 열거형이라고 불리며, 서로 연관된 상수들의 집합을 의미 /* enum 예시 */ public enum Security { NORMAL, WARNING, DANGER; } 특징 인스턴스 생성과 상속을 방지하여 상수값의 타입 안정성이 보장 데이터들 간의 연관관계를 명확하게 표현하여, 구현의 의도를 명확하게 알수 있음 코드가 단순해지고, 가독성 보장 enum 클래스 내부 동작은 static영역임, 즉 프로그램이 종료되기 전까지 가져다 쓸 수 있는 메모리 공간 확보됨 (https://stackoverflow.com/questions/143285/how-much-memory-do-enums-take) 일반 메서드를 가질 수 있음 실무에서 사용할 때, 주로 관계가 있는 타입으로 묶어서 사용함 (ex. 부서유형..
[JAVA] GC의 종류
·
JAVA
GC종류를 명확하게 설명을 못해서 정리 GC종류 Serial GC Parallel GC CMS GC G1 GC Serial GC -XX:+UseSerialGC 32비트 JVM에서 돌아가는 싱글쓰레드 어플리케이션에서 사용 MinorGC, MajorGC 모두 순차적으로 수행 (싱글쓰레드 방식) Deletion and Compacting 수행 Parallel GC (Throughput Collector) -XX:+UseParallelGC 64비트 JVM에서 돌아가는 멀티 CPU, 유닉스 머신에서 사용 Default로 young generation에서만 멀티스레드를 활용, 옵션을 통해 old generation에서도 멀티스레딩 활용 가능 많은 CPU를 사용하기 때문에 GC의 부하를 줄이고, 애플리케이션 처리량을..
[JAVA] 상태패턴
·
JAVA
정의 상태를 객체화하여 상태가 행동을 할 수 있도록 위임하는 패턴 상태 클래스들을 인터페이스로 캡슐화 하여, 인터페이스를 호출하는 방식 사용하는 경우 객체 동작이 상태에 의존하는 경우 오브젝트 상태에 따라 여러 부분의 조건문이 있는 경우 예시 /* 캡슐화 인터페이스 정의 */ public interface MonitorState { public void checkState(); } /* 상태클래스 정의 */ public class Normal implements MonitorState { @Override public void checkState() { System.out.println("정상상태 확인"); } } /* 상태클래스 정의 */ public class Warning implements Mon..
[JAVA] Builder 패턴
·
JAVA
실무에서 Lombok에서 @Builder 어노테이션으로 많이 사용하나, 정확한 개념을 알기위해 기록 정의 복잡한 객체를 생성하는 방법을 정의하는 클래스와 표현하는 방법을 정의하는 클래스를 별도로 분리하여, 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공하는 패턴 빌더 패턴 사용해야할 경우 생성자에 인자가 많을 경우 생성자에 매개변수가 많은 경우 일반적으로 Model로 사용하는 클래스에서는 흔히 사용하는게 자바빈 패턴 혹은 점층적 생성자 패턴을 사용하나 이러한 경우, 가독성이 좋지 않아 실수하는 경우가 생길 수가 있음, 특히 자바빈패턴 같은경우 setter사용으로 인해 불변객체로 만들 수가 없음 (아래 예시 참조) 점층적 생성자 패턴 /* 점층적 생성자 패턴 */ public class Us..
[JAVA] 상속 / 컴포지션
·
JAVA
상속 부모클래스에서 정의된 필드와 메소드를 자식이 물려받는 것 자식클래스에서 extends를 선언하여 상속을 받을 수 있으며, 부모클래스는 하나만 정의가 가능 객체지향프로그래밍의 특징인 캡슐화를 깨뜨림, 부모클래스의 정의가 변경되면, 하위클래스도 변경하기 때문 캡슐화를 깨뜨리는 단점때문에 왠만한 상황에서는 컴포지션으로 푸는 것이 좋음 (오류낼 가능성 있음) 컴포지션 private 필드를 통하여 기존의 클래스가 새로운 클래스의 구성요소(인스턴스로)로 쓰이는 것 새로운 클래스에 기존 클래스의 영향이 적어, 기존 클래스가 변경되어도 안전함 (변화에 유연함) 예시 /* 부모클래스 */ public class Notebook { public void on() { System.out.println("전원동작"); ..
[JAVA] static 정리
·
JAVA
static 선언 메모리에 한번 할당되어 프로그램이 종료될 때 해제 static 키워드를 붙이면 자바는 메모리 할당을 딱 한번만 하게 되어서 메모리 사용에 이점 Heap영역이 아닌 static영역에 할당되어 GC 관리 영역 밖이라 자주 사용하면 퍼포먼스에 영향을 줌 static으로 설정하면 같은 곳의 메모리 주소만 바라보기 때문에 static 변수의 값을 공유하게 됨 static 변수 클래스 변수, 객체를 생성하지 않고 접근 가능 함 static 메소드 객체의 생성 없이 호출이 가능함 예시 public class Book { /* static 변수 */ public static String BOOK_NAME = "STATIC BOOK"; public String book = "BOOK"; /* stati..