언어
-
이팩티브 자바 Item 1 - 생성자 대신 정적 팩터리 메서드를 고려하라언어/Effective Java 2024. 5. 27. 11:06
인스턴스를 생성하는 방법은 (1) public 생성자 (2) 정적 팩터리 메서드 사용이 있다. 이때, 정적 팩터리 메서드 메서드를 사용하면 다음과 같은 장점이 있다.1. 생성 목적에 대한 이름 표현이 가능하다. (객체 생성의 가독성이 높아진다) 생성자는 클래스명으로만 구현할 수 있지만, 정적팩터리 메서드는 자신의 이름을 가질 수 있다.new 키워드를 통해 생성자를 생성하면, 해당 생성자의 인수 순서와 내부구조를 알고 있어야 목적에 맞게 객체를 생성할 수 있다는 번거로움 존재정적 팩터리 메서드 구현 시 자주 사용되는 이름이 있다! from: 매개변수를 받아서 해당 타입의 인스턴스 반환of: 여러 매개변수 받아서 적합한 인스턴스 반환valueOf : from, of보다 자세한 버전 instance, get..
-
템플릿 메서드(Template Method) 패턴언어/디자인패턴 2024. 5. 26. 22:31
템플릿 메서드 패턴이란? 여러 클래스에서 공통으로 사용하는 메서드를 템플릿화하여 상위 클래스에서 정의하고, 하위 클래스마다 세부 동작 사항을 다르게 구현하는 패턴이다.변하지 않는 기능은 상위 클래스에 만들어두고 자주 변경되어 확장할 기능은 하위 클래스에서 만들도록 하는 것이다.상속이라는 기술을 극대화하여, 알고리즘의 뼈대를 맞추는 것에 초점을 둔다. 공통된 부분에서 다른 부분 혹은 확장 가능한 부분을 제공하는 느낌! (공통을 따로 뺀다는 느낌보다 공통은 그대로 두고, 바뀌는 부분만 새로 만들도록 한다!) AbstractClass(추상 클래스) : 템플릿 메소드를 구현하고, 템플릿 메소드에 돌아가는 추상 메서드를 선언한다. 이 추상 메서드는 하위클래스 ConcreateClass에서 구현된다.Concrete..
-
전략 패턴 (Strategy)언어/디자인패턴 2024. 5. 26. 21:41
전략 패턴이란?실행(런타임) 중 알고리즘 전략을 선택하여 객체 동작을 실시간으로 바뀌도록 하는 행위 디자인 패턴이다.전략은 일종의 알고리즘 혹은 특정 목표를 수행하기 위한 행동 계획을 의미한다.어떤 일을 수행하는 알고리즘이 여러가지 일때, 동작들을 미리 전략으로 정의하여, 손쉽게 교체하는 방법이다. 알고리즘 변형이 빈번할 경우 적합하다. 전략 인터페이스 : 모든 전략 구현체에 대한 공용 인터페이스 전략 객체(concreate): 전략 인터페이스 구현체 컨텍스트(Context) : 알고리즘을 실행할 때 해당 알고리즘과 연결된 전략 객체 메서드 호출 (전략을 사용하는 큰 기능)클라이언트 : 전략 객체 전달, 해당 전략 사용해서 결과 얻음class Client{ public static void main(St..
-
입출금 내역 분석기(2)언어/객체지향 2024. 5. 26. 19:20
1. 목표 기존 입출금 내역 분석기를 개선코드 베이스 유연성 및 유지보수 개선을 위해 개방/폐쇄 원칙 적용 언제 인터페이스를 사용해야 좋을지 일반적 가이드라인 및 높은 결합도 피할 수 있는 기법 학습자바 예외처리 방법 2. 확장된 입출금 내역 분석기 요구사항 특정 입출금 내역을 검색할 수 있는 기능 ex 주어진 날짜 범위 또는 특정 범주의 입출금 내역얻기검색 결과의 요약 통계를 텍스트,HTML 등 다양한 형식으로 만들기3. 개방/폐쇄 원칙 기존 코드를 변경하지 않으면서, 기능을 추가할 수 있도록 설계 되어야 한다는 원칙 확장에는 개방적이고, 수정에는 폐쇄적 (확장은 새로운 기능 추가를 의미한다.)즉, 기능 추가 요청이 오면, 클래스 확장 통해 손쉽게 구현하면서 확장에 따른 수정은 최소화 OCP는 추상화..
-
입출금 내역 분석기 (1) - 응집도와 결합도에 따른 클래스 분리언어/객체지향 2024. 5. 24. 17:12
1. 목표단일책임원칙을 배워보자응집도와 결합도에 대해 생각해보자 2. 요구사항텍스트 파일이 콤마로 분리된 값으로 주어진다. 이 값을 파싱해서 결과를 얻을 것이다.입출금 내역의 총 수입과 총 지출은 각각 얼마인가? 결과는 양수인가 음수인가?특정 달엔 몇 건의 입출금 내역이 발생했는가?지출이 가장 높은 상위 10건은 무엇인가?돈을 가장 많이 소비하는 항목은 무엇인가?30-01-2017,-100,Deliveroo//..3. KISS 원칙 keep it short and simple 원칙을 의미한다. 코드 설계나 내용을 불필요하게 복잡하게 만들지 말자는 원칙 public class BankTransactionAnalyzerSimple { private static final String RESOURCES ="..
-
자바스터디(1)언어/JAVA 2023. 10. 18. 01:00
1. 절차지향 to 객체지향 - 과거의 프로그래밍은 절차지향적이었다. 다른 말로 프로세스 지향적이었다. - 데이터를 조작하는 코드를 별도로 분리(함수 혹은 프로시저)로 쪼개고 각 프로시저들이 데이터를 조작하는 방식이다. - 각 프로시저는 다른 프로시저를 사용할 수 있고, 각 프로시저는 같은 데이터를 사용할 수 있다.(프로시저간 데이터 공유) ex) 평균 계산 프로그램 : 각 과목 점수 데이터 읽어서 합+평균구하기(함수1) -> 화면출력(함수2) 이때 각 프로시저는 데이터를 공유하는 방식 -> 데이터 중심적 구현 - 프로세스를 한눈에 볼 수 있다는 장점이 있지만 명백한 한계점이 존재한다. 1. 프로그램 규모가 커지면, 함수가 너무 많이 증가 2. 데이터 이름 의미 등등 변경이 생기면 함수를 하나씩 다 수정..
-
디자인패턴 (8) - 어댑터 패턴언어/디자인패턴 2023. 9. 12. 16:41
1. 어댑터 패턴이란? - 클래스를 어댑터로 사용하는 구조 패턴이다. - 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들을 함께 작동하도록 변환해주는 역할 - 이미 구축되어 있는 것을 새로운 어떤것에 사용할 때 양 쪽 간의 호환성을 유지해 주기 위해 사용하는 것 - 호환성 및 신규 기능 확장 2. 어댑터 패턴 구조 - 상속 혹은 합성해서 작업할 수 있다. 2.1 객체 어댑터 - 합성된 맴버에게 위임을 이용한 어댑터 패턴이다. - 자기가 해야할 일을 클래스 멤버 객체의 메소드에게 다시 시킴 - 합성을 활용하여 런타임 중 어댑터가 결정되어 유연하다. - 하지만, Adaptee객체를 필드 변수로 저장해야해서 공간을 차지한다. - Adaptee : 어댑터 대상 객체 -> 기존 시스템/외부 시스템/..
-
디자인 패턴 (7) - 커맨드 패턴언어/디자인패턴 2023. 9. 12. 11:31
1. 커맨드 패턴이란? - 실행될 기능을 캡슐화하여 여러 기능을 실행할 수 있는 재사용성이 높은 클래스 설계 패턴 - 이벤트가 발생했을 때 실행될 기능이 다양+변경 가능성이 있을때, 이벤트 발생 클래스 변경하지 않고 재사용 - 행위 패턴 중 하나이다. - 실행할 기능 캡슐화하여 실행 요구 호출자(클라이언트)클래스와 실제 기능 수신자 클래스 의존성 제거 - 실행될 기능이 변경되어도 호출자 클래스에 어떠한 수정 없이 그대로 사용가능 1.1 커맨드 패턴의 구조 - Command : 실행될 기능에 대한 인터페이스 - ConcreteCommand: 실제 실행되는 기능 구현 - Invoker : 기능의 실행을 요청하는 호출자 클래스 - Receiver: ConcreteCommand에서 execute 메서드 구현시 ..