Java & Spring/자바
-
자바 참조 유형 (Strong, Soft, Weak, Phantom Reference)Java & Spring/자바 2021. 2. 28. 22:54
자바 참조 유형 강한 참조(Strong Reference) 일반적으로 new를 통해서 객체를 생성하게 되면 생기게 되는 참조. 강한 참조를 통해 참조되고 있는 객체는 가비지 컬렉션의 대상에서 제외된다. 소프트 참조(Soft Reference) java.lang.ref.SoftReference 객체를 참조하는 경우가 SoftReference 객체만 존재하면, GC의 대상이 됨 일반적으로는 메모리 여유에 따라 GC의 대상 여부가 결정 메모리 여유가 충분하면 GC가 수행되더라도 수거되지 않는다. JVM의 메모리가 부족하다면(Out Of Memory에 가깝다면) 힙 영역에서 제거된다. 약한 참조(Weak Reference) java.lang.ref.WeakReference GC가 발생하면 무조건 수거됨 GC의 ..
-
Checked Exception vs Unchecked ExceptionJava & Spring/자바 2021. 2. 28. 22:24
Exception과 Error An exception is represented by an instance of the class Throwable (a direct subclass of Object) or one of its subclasses. Throwable and all its subclasses are, collectively, the exception classes. (subclass of Throwable must not be generic) The classes Exception and Error are direct subclasses of Throwable. Exception is the superclass of all the exceptions from which ordinary pr..
-
String vs (StringBuilder vs StringBuffer) (JAVA)Java & Spring/자바 2020. 10. 20. 20:35
StringBuffer vs StringBuilder (vs String) String 불변(immutable)의 속성을 가짐 (StringBuilder와 StringBuffer는 mutable) string을 더하기 연산(+)을 하면 새로운 메모리 영역을 가리키게 변경 더해지기 전 기존 문자열은 나중에 GC에 의해 사라짐 즉, 새로운 String 인스턴스가 생성되는 것 StringBuilder vs StringBuffer 가장 큰 차이점은 동기화(Synchronized)의 유무이다. StringBuilder 성능은 StringBuffer보다 좋지만, 동기화를 지원하지 않기 때문에, 싱글 쓰레드 환경에서 활용하는 것이 좋음 StringBuffer 동기화(Synchronized)를 지원하여 멀티 쓰레드 환..
-
Final 키워드 (JAVA)Java & Spring/자바 2020. 10. 20. 20:34
final keyword class, method, 변수 앞에 final을 선언하여 각각의 특징을 갖는다. final class => 다른 클래스에서 상속 불가 final method => 다른 메소드에서 오버라이딩 불가 final variable => immutable 상수 값으로 선언 ~> 새로 할당할 수 없는 변수 finally try-catch , try-catch-resource 구문을 사용할 때, 정상 작동과 에러 발생의 경우 모두 포함해서 마무리 해야하는 작업이 있을 때, 해당하는 코드를 작성하는 코드블록 finalize() GC에 의해 호출되는 함수 ~> 절대 호출해서는 안되는 함수 Object 클래스에 정의되어 있으며, GC 발생 시점이 불분명하기 때문에 이 메소드가 실행된다는 보장은 없..
-
동기화(Synchronized)Java & Spring/자바 2020. 10. 20. 20:24
동기화 자바에서 동기화(synchronized) 구현하는 방식 두 가지 동기화(synchronized) 여러 개의 스레드가 하나의 자원을 사용할 때, 현재 데이터를 사용하고 있는 스레드를 제외한 나머지 스레드들을 데이터에 접근할 수 없도록 막는 개념 synchronized 키워드를 남발하면 프로그램 성능 저하 구현 방법 synchronized method 방법 메소드 앞에 synchronized 키워드를 붙여주면 간단하게 사용 가능 public synchronized myMethod(type param) { // ... } synchronized block 방법 파라미터에 공유할 객체를 넣어서 사용 synchronized (공유 객체) { // ... } public void exMethod() { //..
-
Annotation(어노테이션)Java & Spring/자바 2020. 10. 20. 20:09
Annotation Annotation은 본래 주석이란 뜻이지만, 현재는 주석과 달리 주석처럼 코드에 달아서 클래스에 특별한 의미를 부여하거나 기능을 주입하는 기능을 가지고 있다. 런타임 시 특정 기능을 실행하도록 정보 제공 3 종류 Built-in annotation JDK에 내장되어 있으며 @Override가 대표적인 예시 Meta annotation 어노테이션에 대한 정보를(동작 대상과 시점 결정) 나타내기 위한 어노테이션 @Target이나 @Retention과 같은게 대표 예시 Custom Annotation 개발자가 직접 만드는 어노테이션 Meta annotation을 활용해서 만들 수도 있음 스프링 프레임워크에서 주로 의존성 주입(@Autowired)과 역할 정의(@service과 같은 것)에..
-
JVM & GC (JAVA)Java & Spring/자바 2020. 10. 20. 18:22
JVM과 GC JVM (Java Virtual Machine) 자바 애플리케이션을 클래스 로더를 통해 읽어서 자바 API와 함께 실행하는 것 JAVA와 OS 사이에서 중개자 역할 ~> OS에 구애받지 않고 재사용을 가능하게 함 메모리 관리, Garabage collection을 수행 스택 기반의 가상머신 cf) ARM 아키텍처와 같은 하드웨어는 레지스터 기반으로 동작 자바 실행 과정 JVM은 OS로부터 프로그램이 필요로 하는 메모리를 할당받음 JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리 자바 컴파일러(javac)가 소스코드(.java)를 바이트코드(.class)로 변환 Class Loader를 통해 class 파일들을 JVM으로 로딩 로딩된 class 파일들은 Execution engin..
-
객체지향 프로그래밍 (OOP)Java & Spring/자바 2020. 10. 20. 15:43
객체지향 프로그래밍(OOP)란 무엇인가 오퍼레이션(operation)으로 정의할 수 있음 (객체의 기능) 식별 이름 파라미터 및 파라미터 타입 리턴 값 및 리턴 타입 인터페이스 모든 오퍼레이션 집합 객체를 사용하기 위한 명세를 의미 메시지 오퍼레이션의 실행을 요청하는 것을 메시지를 보낸다고 표현 메소드 호출 ~> 메시지를 보내는 과정 객체들이 메시지를 통해서 통신 ~> 원하는 결과를 얻는다 (객체 간 메시지를 주고받음) 4가지 특징 추상화 객체의 공통 프로퍼티(요소)와 메소드를 뽑아내는 작업 코드를 어떻게 짜야할지 미리 추상적으로 설계하는 작업 캡슐화 객체 수행 목적에 따라서 데이터 구조 및 메소드를 결합해서 묶는 것. 외부에서 무분별한 객체의 변경을 막기 위해, 구현 내용을 감추고 이용 방법만 제시 클..