전체 글(73)
-
[GOF] 전략(Strategy) 패턴
1. Strategy Pattern 실행(런타임) 중에 알고리즘 전략을 선택하여 객체 동작을 실시간으로 바뀌도록 할 수 있게 하는 행위 디자인 패턴 즉, 동작들을 미리 전략으로 정의함으로써 손쉽게 전략을 교체할 수 있는, 변형이 빈번한 경우 적합한 패턴 전략 알고리즘 객체들 : 알고리즘, 행위, 동작을 객체로 정의한 구현체 전략 인터페이스 : 모든 전략 구현체에 대한 공용 인터페이스 컨텍스트 : 알고리즘을 실행해야 할 때마다 해당 알고리즘과 연결된 전략 객체의 메소드를 호출 클라이언트 : 특정 전략 객체를 컨텍스트에 전달 함으로써 전략을 등록하거나 변경하여 전략 알고리즘을 실행한 결과를 누린다. 동일 계열의 알고리즘군을 정의하고 (전략 구현체로 정의) , 각각의 알고리즘을 캡슐화하여 (인터페이스로 추상화..
2024.03.17 -
[GOF] 싱글톤(Singleton) 패턴
1. 싱글톤 패턴 단 하나의 유일한 객체를 만들기 위한 코드 패턴 메모리 절약을 위해, 인스턴스가 필요할때 똑같은 인스턴스를 새로 만들지 않고 재활용 하는 기법 대표적으로 데이터베이스 연결 모듈 이밖에도 디스크 연결, 네트워크 통신, DBCP 커넥션풀, 스레드풀, 캐시, 로그 기록 등에 이용된다. 정적 메소드 getInstance()를 통해 객체를 불러와 변수에 저장하고 이를 출력해보면 똑같은 객체 주소를 가지고있다. 객체 하나만 생성하고 여러변수에 불러와도 돌려쓰기를 한것 public class Main { public static void main(String[] args) { // Singleton.getInstance() 를 통해 싱글톤 객체를 각기 변수마다 받아와도 똑같은 객체 주소를 가리킴 S..
2024.03.16 -
[JAVA] GC에 대하여
Garbage Collection 자바에서 할당된 메모리들에 대해 Garbage Collector(GC)가 자동으로 불필요한 메모리를 수집해 해제해주는 역할을 담당 동적으로 할당된 메모리 영역 가운데 더이상 사용하지 않거나 불필요하게 할당된 영역을 탐지하여 자동으로 해제하는 기법 장점 유효하지 않은 포인터 접근 : 이미 해제된 메모리에 접근하는 버그를 방지한다. 이중 해제 : 이미 해제된 메모리를 또 다시 해제하는 버그를 방지 Memory leak 방지 : 더 이상 필요하지 않은 메모리가 해제되지 않고 남아있어 메모리가 부족해 프로그램 중단되는 버그 방지 단점 Garbage Collection 이 발생하는 시점을 예측하기 어려움 할당된 메모리가 해제된 시점을 알수없다. GC가 동작하는 동안에는 다른 동작..
2024.03.15 -
[SPRING] 동시성이슈 해결방법
Inflearn "재고시스템으로 알아보는 동시성 이슈 해결방법" 과 컬리 기술블로그를 보고 정리한 글입니다. 1. 동시성 문제 @Getter @Entity @NoArgsConstructor public class Stock { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private Long productId; private Long quantity; public Stock(final Long id, final Long quantity) { this.id = id; this.quantity = quantity; } public void decrease(final Long quantity) { if (this.quantity ..
2024.03.14 -
[JAVA] 에러(Error) 와 예외 클래스(Exception)
1. 프로그래밍의 오류 종류 컴파일 에러(compile-time error) : 컴파일시에 발생하는 에러 런타임 에러(runtime error) : 실행시에 발생하는 에러 논리적 에러(logical error) : 실행은 되지만 의도와 다르게 동작하는 것 1. 논리적 에러 (Logic Error) 이른바 '버그' 프로그램이 실행하고 작동하는데는 아무런 문제가 없지만, 결과가 예상과 달라 사용자가 의도한 작업을 수행하지 못하게 되어 서비스 이용에 지장이 생기는 에러 개발자는 프로그램의 전반적인 코드와 알고리즘을 체크 할 필요가 있다. 2. 컴파일 에러 컴파일 단계에서 오류 발견하면 컴파일러가 에러 메세지 출력해주는 것 문법 구문 오류(syntax error) 프로그램이 실행 자체가 불가하기 때문에, 그렇게..
2024.03.13 -
[JAVA] clone 메소드(깊은복사, 얕은복사)
1. clone 메소드 Object.clone() 메소드는 인스턴스 객체의 복제를 위한 메소드로, 해당 인스턴스를 복제하여 새로운 인스턴스를 생성해 그 참조값을 반환한다. clone() 메소드를 사용하기 위해서는 오버라이딩을 해야 되는데, 이때 데이터의 보호를 이유로 Cloneable 인터페이스를 구현한 클래스의 인스턴스만이 사용할 수 있다. 2. 깊은복사 / 얕은복사 자바에서 객체와 같은 참조 변수는 직접 값을 저장하는게 아닌 힙(Heap) 영역에 데이터를 저장하고, 그의 주소값을 저장하는 식으로 구성되어 있다. 기본형 타입이 아닌, 객체와 같은 참조형 타입의 변수를 그대로 복제한다면 값이 복사되는 것이 아닌 주소값이 복사되어 결국 같은 힙의 의 데이터를 바라보는 꼴이 되어버린다. 이런한 복제를 얕은복..
2024.03.08