- 공통으로 사용될 수 있는 특정한 기능들을 모듈화한 것
- 프레임워크에는 제어의 역전(Inversion Of control)이 적용되어 있다
: 프레임워크와 라이브러리의 차이는 흐름(Flow)에 대한 제어 권한이 어디에 있느냐의 차이. 프레임워크는 전체적인 흐름을 자체적으로 가지고 있으며, 프로그래머가 그 안에 필요한 코드를 작성하는 반면에 라이브러리는 사용자가 흐름에 대해 제어를 하며 필요한 상황에 가져다 쓰는 것
과거 SW 개발 과정에서 발견한 설계 노하우를 패턴으로 정리한 것으로 장점으로는 범용적인 코드 스타일로 의사소통을 효율적으로 할 수 있고요, 검증된 구조이므로 설계를 빠르게 할 수 있습니다. 목적에 따라서 생성패턴, 구조패턴, 행동패턴으로 나눠지게 됩니다.
싱글톤 패턴
은 인스턴스를 오직 1개만 생성하는 패턴입니다. 예를들면 디비 커넥션이나 스레드 풀 객체를 생성할 때 사용합니다. 만드는 방법으로는 이른 초기화 방식, 게으른 초기화 방식, 그리고 Holder에 의한 초기화 방식이 있습니다.
팩토리 패턴
은 객체를 직접 생성하지 않고 객체를 생성하는 Factory 객체를 사용하는 패턴입니다. 장점으로는 직접 객체를 생성하는 것을 막아줘서 결합도를 낮춰주는 효과가 있습니다.
전략(정책) 패턴
은 객체의 행위를 동적으로 바꾸고 싶은 경우 '캡슐화한 알고리즘'(전략)을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법을 말합니다.
간단히 말해서 객체가 할 수 있는 행위들 각각을 전략으로 만들어 놓고, 동적으로 행위의 수정이 필요한 경우 전략을 바꾸는 것만으로 행위의 수정이 가능하도록 만든 패턴입니다.
옵저버 패턴
은 주체가 관찰 대상(subject)의 상태 변화를 관찰하다가 변화가 있을 때 모든 옵저버(subscriber)들에게 변화를 알려주는 디자인 패턴입니다.
해당 패턴을 사용하지 않는다면 polling
을 사용하는데 이를 사용하면 이벤트가 발생했는지 확인 하기 위해서 1s, 1m, 1h마다 확인해야됩니다 -> 리소스 낭비
따라서 이벤트가 일어난 순간 옵저버가 반응하도록 옵저버 패턴
을 사용하여 구현해야 합니다.
대상 객체에 접근하기 전 흐름을 가로채 객체 앞단의 인터페이스 역할을 하는 패턴으로 객체에 대한 접근 제어(security), 캐싱, 로깅 등에 사용합니다.
프로시 서버
서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램
이터레이터
(iterator)를 사용하여 컬렉션의 요소들에 접근하는 패턴으로 Aggregator의 종류에 상관없이 이터레이터라는 하나의 인터페이스로 순회가 가능하다는 장점이 있습니다.
Container / Aggregator : 동일한 데이터의 집합 (종류. Array, Linked List, Tree, Graph, Table...)
즉시 실행 함수를 통해 private
, public
같은 접근 제어자를 만드는 패턴
프로그래밍 패러다임은 프로그래머들이 프로그래밍을 더 쉽게, 그리고 더 잘하기 위해서 만든 프로그래밍 방식, 방법론
선언형 프로그래밍이란 ‘무엇을’ 풀어내는가에 집중하는 패러다임
“프로그램은 함수로 이루어진 것이다.”라는 명제가 담겨 있는 패러다임
객체지향 프로그래밍(OOP)
은 객체들의 집합으로 프로그램의 상호 작용을 표현
오버로딩 VS 오버라이딩
오버로딩(overloading)
은 같은 이름을 가진 메서드를 여러 개 두는 것. 메서드의 타입, 매개변수의 유형, 갯수 등으로 여러 개를 둘 수 있으며 컴파일 중에 발생하는 ‘정적’ 다형성.
오버라이딩(overriding)
은 주로 메서드 오버라이딩을 말하며 상위 클래스로부터 상속받은 메서드를 하위 클래스가 재정의하는 것을 의미하며 런타임 중에 발생하는 ‘동적 다형성’
절차형 프로그래밍
은 로직이 수행되어야 할 연속적인 계산 과정으로 이루어 짐.
정해진 순서를 따른다.
비즈니스 로직이나 서비스의 특징을 고려해서 패러다임을 정하는 것이 좋다. 여러 패러다임을 조합하여 상황과 맥락에 따라 패러다임 간의 장점만 취해 개발하는 것이 좋다.