no image
전략 패턴(Strategy Pattern)
전략 패턴이란전략 패턴은 여러 가지 방법(알고리즘)을 미리 만들어 놓고, 필요할 때 그중 하나를 골라 사용하는 것입니다. 이렇게 하면 필요할 때마다 새로운 방법을 쉽게 추가할 수 있습니다.전략 패턴을 사용 시 이점1. 동작의 유연한 변경 : 실행 중에 원하는 전략(행동)을 교체할 수 있습니다.2. 코드 수정 최소화 : 새로운 전략을 추가해도 기존 코드를 수정하지 않아도 됩니다.3. 유지보수성 향상 : 코드가 분리되어 있어 가독성과 유지보수가 쉬워집니다.예시 : 택배 배송 시스템문제 사항우리는 택배를 고객에게 배송해야 합니다.배송 방법은 오토바이, 트럭, 드론 중 하나를 선택할 수 있습니다.고객의 위치, 물건의 크기, 긴급성에 따라 적절한 배송방법을 선택해야 합니다.새로운 배송 방법이 추가될 가능성도 있습..
2025.01.12
no image
Call By Value와 Call By Reference
함수가 호출될 때, 일반적으로 메모리 내에서 함수를 위한 별도의 임시 공간이 생성됩니다. 이 공간은 주로 스택 프레임이라고 불리며, 함수 호출 시 할당되는 메모리 블록으로 사용됩니다. 스택 프레임에는 함수에서 사용되는 지역 변수 및 기타 관련 정보가 저장됩니다. 함수가 실행을 마치고 종료되면 해당 스택 프레임은 메모리에서 해제됩니다. 함수 호출 방식에는 주로 값에 의한 호출인 (call-by-value)와 참조에 의한 호출(call by referece)이 있습니다. Call By Value (값에 의한 호출) 함수 호출 시에 전달되는 변수의 값의 복사하여 함수의 인자로 전달합니다. 이러한 경우, 복사된 값은 함수 내부에서 지역적으로 사용되는 특성을 가지며, 함수 내부에서 해당 값이 변경되더라도 외부의 ..
2024.03.03
no image
JPA를 이용한 복합키(Composite Key) 매핑
@EmbeddedId와 @IdClass @EmbeddedId JPA에서 복합키를 가진 엔티티 클래스의 복합 키를 매핑하는 데 사용합니다. 이 어노테이션은 복합 키를 하나의 임베디드 클래스로 정의할 때 사용됩니다. 복합키란 단일 필드가 아닌 둘 이상의 필드를 결합하여 엔티티의 기본 키로 사용하는 경우를 말합니다. 이때 @EmbeddedId를 통해 해당 복합 키를 하나의 클래스로 정의하고 해당 클래스를 엔티티 클래스에 포함하여 사용합니다. @Getter @Setter @Builder @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor(access = AccessLevel.PROTECTED) @Entity @Table(name = "u..
2024.01.02
no image
SOLID
SOLID 객체지향 프로그래밍에서 좋은 소프트웨어 설계를 위해 사용되는 다섯 가지 기본원칙입니다. 이 원칙들도 땅에서 솟아서 갑자기 나온 게 아니라 응집도는 높이고 결합도는 낮추는 고전 원칙을 객체 지향의 관점에서 재정립한 것이라고 할 수 있습니다. 결합도와 응집도 결합도 소프트웨어의 모듈 간에 서로 얼마나 강하게 연결되어 있는지를 나타냅니다. 높은 결함도는 모듈 간의 의존성이 높은 것을 의미하며 한 개의 모듈을 변경할 때 다른 모듈들에게 영향을 미칠 수 있음을 나타냅니다. 응집도 모듈 내부의 요소들이 얼마나 밀접하게 관련되어 있는지를 나타냅니다. 높은 응집도를 갖는 모듈은 코드의 가독성이 향상되고 모듈을 이해하기 쉬워집니다. SRP - 단일 책임 원칙 소프트웨어 컴포넌트, 클래스, 함수, 모듈 등이 하..
2023.11.11
no image
Pubilc과 Private
public과 private 그것이 문제로다... public과 private의 선택의 길에서 고를 때 항상 왜 뭘 써야 하지라고 생각하게 되어서 Public과 Private에 대해 알아보게 되었습니다. 접근 제어자 프로그래밍 언어에서 클래스, 메서드, 변수 및 다른 멤버들에 대한 접근 권한을 제어하는 데 사용합니다. 제어자는 코드의 보안, 모듈성 및 유지보수를 향상하는데 도움이 됩니다. public 어떤 클래스나 패키지든 접근이 가능하며, 패키지에서 자유롭게 사용할 수 있습니다. 외부에서 직접 접근할 수 있으므로 주로 라이브러리, API, 인터페이스 등에 사용합니다. 주의해서 사용해야 하며, 인터페이스와 추상 클래스의 메서드 등에 많이 사용합니다. public class Class{ public int..
2023.11.01
no image
Stream(기초)
Stream 데이터 처리 작업을 간결하게 수행하고 병렬 처리를 쉽게 지원하며 성능을 향상하는 역할을 하며 중간 매개자 역활도 가지고 있습니다. stream 사용 stream 에는 중간연산(Intermediate Operation)과 최종연산(Terminal Operation)이 있습니다. 중간연산은 이런저런 작업이 필요 없이 여러 번 사용 가능합니다. 최종연산은 최종적으로 나아지는 결과물을 말하며 한 번만 사용 가능합니다. stream의 종류는 다양하고 자주 사용하는 stream 알아보겠습니다. 정수형 stream int[] scores = {100, 80, 97, 67, 80} Arrays.stream(scores) .filter(x -> x >= 90) .forEach(x -> System.out.p..
2023.10.30
no image
Lambda
람다(Lambda) 함수형 프로그래밍을 지원하고, 코드를 더 간결하게 작성할 수 있도록 도와줍니다. 람다는 익명 함수의 일종으로 메서드를 하나의 식으로 표현하는 방법입니다. 익명 함수 이름이 없는 함수로, 주로 프로그램의 특정 부분에서 일시적으로 사용되고 다른 함수에서 인수로 전달되는 함수입니다. 특징 익명 함수는 이름을 가지지 않고 익명함수는 함수명을 가져야 한다는 제한이 없습니다. 익명 함수를 이용했을 때는 코드를 간결하게 만들 수 있습니다. 람다식 : 간결한 형태의 코드 뭉치 (전달값1, 전달값2, ...) -> {코드} EX1 public void print() { String s = "test"; System.out.println(s); } 람다식으로 바꾸려면 접근제어자인 public 필요가 x..
2023.10.29
no image
Static 사용?
Static? 정적 변수는 특정 클래스와 연관된 변수를 나타냅니다. 이러한 변수는 클래스 수준에 정의되며 해당 클래스의 모든 객체 인스턴스 간에 공유됩니다. 정적변수 (Static Variables) 특정 클래스와 관련이 있으며 클래스의 모든 인스턴스(객체)에 의해 공유되며 동일한 값 또는 상태를 가집니다. 정적 변수는 객체 지향 프로그래밍 언어에서 자주 사용되며 클래스의 모든 인스턴스가 공유해야 하는 데이터를 저장하는 데 유용합니다. 정적 변수에는 클래스 이름을 사용하여 액세스 할 수 있으며 객체 참조가 아닌 클래스 이름을 이용합니다. class MyClass{ Static int staticVar = 10; 정적 변수 액세스 int value = MyClass.staticVar; 정적 메서드 (Sta..
2023.10.27
no image
HashSet, HashMap
HashSet 중복된 원소를 허용하지 않고, 순서를 보장하지 않는 집합을 구현하는 클래스입니다. HashSet 특징 중복된 원소 사용하지 않습니다. 순서를 보장하지 않습니다. 빠른 검색과 삽입이 가능합니다. public class HashSet { public static void main(String[] args) { //세트 - 중복 허용 x // HashSet 사용시 순서도 보장 되지 않고 중복도 허용되지 xx HashSet set = new HashSet(); //데이터 추가 set.add("삼겹살"); set.add("쌈장"); set.add("음료"); set.add("소금"); set.add("후추"); set.add("깻잎"); set.add("삼겹살"); set.add("상추"); set..
2023.10.23