자바 8

순차 스트림 VS 병렬 스트림

1. 순차 스트림이란?- 데이터 처리가 한 스레드에서 순차적으로 실행된다- 스트림의 요소를 처음부터 끝가지 차례로 처리한다.- 실행 순서가 보장된다.장점- 실행 순서가 명확하게 보장되므로 예측 가능한 결과를 제공- 작은 데이터셋이나 간단한 작업에 적합- 스레드 관리 오버헤드가 없어서 병렬 스트림 보다 가볍다단점- 대용량 데이터를 처리하거나 복잡한 연산이 필요한 경우 성능이 제한된다. 2. 병렬 스트림이란?- 데이터를 여러 스레드로 분할하여 병렬로 처리- 내부적으로 ForkJoinPool을 사용하여 작업을 병렬 처리한다.- 실행 순서를 보장하지 않으며, 결과의 순서를 중요하게 생각하지 않을 때 적합하다.장점- 대용량 데이터를 처리할 때 처리 속도를 크게 향상할 수 있다.- CPU 코어를 효율적으로 활용하여..

자바 2025.01.21

람다 캡처링(Capturing lamda)

람다 표현식에서는 익명 함수가 하는 것처럼 자유 변수를 활용할 수 있다. 이를 람다 캡처링이라고 한다. int portNumber = 8080;Runnable r = () -> System.out.println(portNumber);이 코드는 컴파일이 된다. 하지만 자유 변수에도 제약이 있다. 람다는 인스턴스 변수와 정적 변수를 자유롭게 자신의 바디에서 참조할 수 있도록 할 수 있다.하지만 그러기 위해서는 지역 변수는 명시적으로 final로 선언되어 있어야 하거나 실직적으로 final로 선언된 변수와 똑같이 사용되어야 한다.int portNumber = 8080;Runnable r = () -> System.out.println(portNumber);portNumber = 3307;이 코드는 컴파일 에러..

자바 2024.12.31

FACTORY 패턴

FACTORY란?객체의 생성과 사용을 분리하기 위해 객체 생성에 특화된 객체를 FACTORY라고 부른다. public class Client { private Factory factory; public Client(Factory factory) { this.factory = factory; } public Money getAvatarFee() { Movie avatar = factory.createAvatarMovie(); return avatar.getFee(); }} 위코드와 같이 Movie객체를 Client에서 만드는게 아니라 Factory에게 위임을해서 만드는 패턴이다.이렇게되면 Client는 오직 사용과 관련된 책임만 지고 생성과 ..

자바 2024.12.20

디미터 법칙과 캡슐화

디미터 법칙이란?간단하게 요약하자면 객체의 내부 구조에 강하게 결합되지 않도록 협력 경로를 제한한다는 것이다.요약 하자면 "오직 하나의 도트만 사용하라"이다.또, 아래의 조건을 만족해야 한다.this 객체메서드의 매개변수this의 속성this의 속성인 컬렉션의 요소메서드 내에서 생성된 지역 객체아래 코드는 도트가 두개이므로 디미터 법칙을 위반하는 코드이다.screening,getMovie().getDiscountConditions();

자바 2024.12.19

POLYMORPHISM 패턴

POLYMORPHISM 패턴이란?객체의 타입에 따라 변하는 로직이 있을 때 변하는 로직을 담당할 책임을 어떻게 할당해야 하는가? 타입을 명시적으로 정의하고 각 타입에 다형적으로 행동하는 책임을 할당한다. 프로그램을 if ~ else 또는 switch ~case등의 조건 논리를 사용해서 설계한다면 새로운 변화가 일어날 경우 조건 논리를 수정해야 한다. 이건 프로그램을 수정하기 어렵고 변경에 취약하게 만든다. POLYMORPHISM 패턴은 객체의 타입을 검사해서 타입에 따라 여러 대안들을 수행하는 조건적인 논리를 사용하지 말라고 경고한다. 대신 다형성을 이용해 새로운 변화를 다루기 쉽게 확자하라고 권고한다.

자바 2024.12.19

상속과 합성

상속은 객체지향에서 코들르 재사용하기 위해 널리 사용되는 기법이다.상속의  특징상속은 부모 클래스와 자식 클래스 사이의 관계를 컴파일 시점에 결정한다.실행 시점에 객체의 종류를 변경하는 것이 불가능하다.이 특징으로 인해 두 가지의 문제점이 있다.캡슐화의 위반-> 상속을 이용하기 위해서는 부모 클래스의 구조를 잘 알고 있어야 한다.-> 부모 클래스의 구현이 자식 클래스에게 노출되기 때문에 부모 클래스를 변경할 때 자식 클래스도 함께 변경될 확률을 높인다.-> 상속을 사용한 코드는 변경이 어려워진다.설계가 유연하지 않음합성의  특징합성으로 이루어진 관계는 내부 구현에 대해 외부객체가 알지 못한다.인터페이스에 정의된 메시지를 통해서만 코드를 재사용한다.이 특징으로 인해 상속이 가지는 두 가지의 문제점을 해결한..

자바 2024.12.16