JAVA
-
[JPA] Optimistic, Pessimistic LockJAVA/SPRING 2024. 8. 10. 16:06
낙관적 락(Optimistic Lock)낙관적 락은 사전에 테이블 로우에 락을 거는 방식이 아닌 충돌이 발생했을 경우에 대비하는 방식입니다.테이블에 특정 컬럼을 추가하여 조회 시점의 값과 저장하려는 시점의 값이 동일한지 확인하여 충돌을 방지하도록 동작합니다.이는 충돌 발생 빈도수가 낮은 상황에 적합하며 지속적인 락으로 인한 성능 저하를 막을 수 있습니다.아래는 Spring boot, JPA에서 낙관적 락을 적용하는 예시입니다.Entity@Entityclass UserEntity( id: Long, name: String, version: Int,) { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Long..
-
[JAVA] 컴파일 과정JAVA 2023. 11. 5. 19:36
컴파일 과정 1. 개발자가 자바 소스코드(.java)를 작성 2. 자바 컴파일러가 자바 소스파일을 컴파일하여 자바 바이트 코드(.class)로 변환, 자바 바이트 코드는 컴퓨터는 읽지 못하고 JVM에서 읽을 수 있습니다. 3. 컴파일된 자바 바이트 코드를 JVM의 클래스 로더에게 전달하고 클래스 로더는 동적 로딩을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역(JVM 메모리)에 올립니다. 4. 실행 엔진은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와 실행합니다. 클래스 로더 클래스 로더가 클래스들을 로딩 및 링크하는 과정은 다음과 같습니다. 로드: 클래스 파일을 가져와 JVM 메모리에 로드 검증: 자바 언어 명세, JVM 명세에 명시한대로 구성되어 있는지 검사 링킹:..
-
[Spring] IoC(Inversion of Control)JAVA/SPRING 2023. 9. 3. 21:46
IoC(Inversion of Control)은 메소드, 객체의 호출 작업을 개발자가 결정하는 것이 아닌 외부에 의해서 결정되는 것을 의미합니다. 스프링의 경우 스프링 컨테이너에 Bean을 등록하면 스프링 컨테이너에서 Bean의 라이프 사이클(생성, 의존성 주입, 초기화, 소멸)을 관리해주고 있습니다. IoC의 장점 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드 작성이 가능 IoC 컨테이너가 객체를 관리해주므로 개발 과정에서 객체 관리에 대한 리소스 감소
-
[Spring] AOP (Aspect Oriented Programming)JAVA/SPRING 2023. 6. 11. 15:43
1. AOP 란? 자바에서는 다중 상속이 불가능하여 상속을 통한 공통 메소드를 구성에 한계가 있지만 AOP를 통해 핵심 관심 사항(Core Concern)과 공통 관심 사항(Cross-Cutting Concern)을 분리하고 모듈화 할 수 있습니다. (ex. 주문 API: 핵심 관심사(주문 로직), 공통 관심사(로깅)) AOP의 장점 공통 관심사를 핵심 관심사로부터 분리하여 핵심 로직의 변경없이 공통 관심사를 변경 가능 공통 로직을 적용할 대상을 선택 가능 주요 개념 Aspect: 공통적인 관심사를 모듈화 Target: Aspect가 적용될 대상(메소드, 클래스...) Join point: Aspect가 적용될 수 있는 시점 Advice: Aspect의 기능 Point cut: Advice를 적용할 메소..
-
[Spring] 의존성 주입 (Dependency Injection)JAVA/SPRING 2023. 5. 29. 15:44
1. 의존성 주입이란? 객체를 직접 생성하는 것이 아니라 외부에서 생성된 객체를 주입하는 방법으로 런타임에 의존성을 동적으로 주입하여 결합도를 낮출 수 있습니다. 스프링에서 의존성을 주입할 수 있는 방법으로는 생성자 주입, 필드 주입, 수정자 주입 등의 방법이 존재하고 스프링에서는 생성자 주입을 권장하고 있습니다. 의존성 주입을 통해 클래스들의 결합도를 낮출 수 있고 객체의 유연성을 높이고 테스트 작성이 용이해진다는 장점이 있습니다. public class Person { private Student student; public Person() { this.student = new Student(); } } 위 코드 예시의 문제점은 Person 클래스와 Student클래스가 강한 결합도를 가지고 있습니..
-
[JAVA] Class Object Instance 차이JAVA 2020. 7. 4. 16:27
Class 개념 객체를 만들어 내기 위한 설계도 혹은 틀 연관되어 있는 속성과 메서드들의 집합 Object 개념 구현할 대상 클래스에 선언된 형태로 생성된 실체 특징 클래스의 인스턴스라고도 부름 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 가짐 oop관점에서 클래스의 타입으로 선언되었을 때 객체라 부름 Instance 개념 객체를 소프트웨어에 실체화한 것 실체회된 인스턴스는 메모리에 할당됨 특징 인스턴스는 객체에 포함 oop관점에서 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라고 부름 객체는 클래스의 인스턴스 Class와 Object의 차이 클래스는 설계도, 객체는 설계도로 구현한 모든 대상을 의미 Object와 Instance의 차이 클래스의 타입으로 선언되었을 때 객체라 부름 객체가 메모리에..
-
[JAVA] 스트림(Stream)JAVA 2020. 5. 21. 21:04
Stream Stream이란? Java8에서 추가된 것으로 람다를 활용할 수 있는 기술 중 하나 배열 또는 컬렉션등의 저장요소를 하나씩 참조해 람다식을 적용하여 반복적으로 처리할 수 있음 즉, 배열과 컬렉션을 함수형으로 처리할 수 있음 스트림 구조 스트림 생성 : 스트림 인스턴스 생성 중간 연산 : 필터링 및 매핑 등 원하는 결과를 만드는 중간 작업 최종 연산 : 최종적으로 결과를 만들어내는 작업 Create Operations - Arrays.stream() String[] arr = new String[] {"A", "B", "C"}; Stream stream = Arrays.stream(arr); Stream streamOfArrayPart = Arrays.stream(arr, 1, 3);- Col..
-
[JAVA] 람다식(Lambda Expression)JAVA 2020. 5. 21. 21:03
Lambda Expression 람다식이란? 함수적 프로그래밍을 위해 JAVA8 에서 추가된 기능으로 익명객체를 생성하기 위한 표현식 쉽게말해 함수인데 함수를 따로 만들지 않고 코드한줄에 함수를 써서 그것을 호출하는 방식 - 람다식 이전 기존 자바에서는 다형성을 제공하기 위해 interface를 만들고 그것을 구현한 class를 만들어 interface참조 변수에 interface를 구현한 class객체를 생성해 사용함 public interface ExampleInterface { public void ex(); } public class Example implements ExampleInterface { @Override public void ex(){ System.out.println("Exampl..