전체 글
-
[디자인 패턴] 객체지향 프로그래밍과 객체지향 설계디자인 패턴 2022. 6. 30. 16:55
* 추상화 어떤 영역에서 필요로 하는 속성이나 기능을 추출하는 작업 데이터 구조, 표현 방법에 대한 추상화 처리 과정에 대한 추상화 * 캡슐화 데이터를 감싸서 외부에서 사용 가능한 부분만을 제공 (ex. private 접근 제어자) 클라이언트 코드가 세부적인 사항을 알 필요가 없음 단순한 접근을 제공하여 오류가 생길 부분을 감소함 * 상속성 일반적인 개념의 객체에서 보다 구체적인 개념의 객체의 관계를 표현함 (상위 클래스는 일반적인 개념을 가지고 하위로 갈수록 구체적) 상속관계의 클래스는 상위 클래스의 타입을 내포하고 상위 클래스의 속성과 기능을 하위 클래스에서 사용하거나 재정의 할 수 있음 클래스간의 결합도가 높아짐(수정에 대한 영향이 높아짐) - 하나의 타입으로 핸들링 * 다형성 같은 메세지 같은 구..
-
[디자인 패턴] 디자인 패턴이란?디자인 패턴 2022. 6. 30. 16:38
* 디자인 패턴이 생겨난 이유 - 소프트 웨어를 재상용할 수 있고 유연하고 확장성 있으며 유지보수가 용이하게 만드는 것은 무엇보다 경험이 중요했음 - GoF 4명의 학자가 좋은 설계라는 것은 이런 것이라는 23개의 패턴을 제안하였음 - 좋은 설계를 유도하여 유지보수에 대한 비용을 줄이기 위한 설계 * 디자인 패턴은 규칙이 아니다 - 좋은 객체 지향 설계를 위한 제안이다. - 언어에 종송적이지 않음 - 프레임 워크 개발에 적용될 수 있음 - 특정 영역에 종속적이지 않고 일반적으로 활용 결국 높은 결합도를 가지거나 알고리즘 종속성, 객체의 표현이나 구현에 종속적으로 구현된 소프트웨어 리팩토링을 가능하게 한다.
-
프로젝트 구현 단계에서 권장하는 구현방법개발 2022. 6. 27. 18:52
1. 개발 디자인 문서를 작성한 후 구현을 시작하자 요구사항을 명확하게 파악하고, 비즈니스적인 맥락과 이루고자 하는 바를 파악, 사용할 수 있는 리소스, 인프라 등 제약조건에 맞춰 개발, 설계, 배포, 운영 등이 생각되어야한다. 1) 문제 정의 배경, 필수 조건, 목표, 목표가 아닌 것, 성공과 실패에 대한 평가 지표 2) 해결방안 설계(다이어그램 필수), 구현(기술 스택),, 테스트, 코드리뷰, 모니터링, 보안 3) 배포계획 계획(어떤 유저에게, 단계적으로 ...), 배포(어떻게 배포할 것인가) 4) 타임라인 로드맵(단계별 마일스톤) 2. 테이블 설계를 먼저 하지 말고 핵심 도메인 도출을 먼저하자 - 테이블은 도메인 객체를 영속화하기 위한 그릇 정도의 역할(단지 객체 저장 공간) - 객체끼리 어떤 메시..
-
DDD - 도메인 주도 설계개발 2022. 6. 27. 18:05
도메인 주도 설계에서 레이어 간의 참조 관계는 단방향 의존을 유지하고 계층 간 호출에서는 인터페이스를 통한 호출이 되어야 한다. * 레이어 간 참조 관계 모든 레이어의 중심은 도메인이 되어야한다. 사용자 인터페이스 → 응용(application) 계층 → 도메인 계층 ← 인프라 스트럭쳐 단반향 참조관계를 유지해야하며 예를 들어 사용자 인터페이스의 특정 클래스가 도메인 계층에서 임포트 되고 있다면 이는 참조관계를 지키지 않은 것이라 볼수 있다. - 사용자 인터페이스 사용자에게 정보를 보여주고 사용자의 명령을 해석하는 책임을 가진다. (Controller, Dto, Mapper) - 시스템 외부에서 전달되는 요청을 해석해서 시스템이 처리할 수 있게 해주는 것 - 시스템에서 반환되는 것을 유저의 요청에 맞게 ..
-
좋은 구현이란? - 좋은 코드와 설계를 알 수 있는 4가지 기준개발 2022. 6. 27. 17:26
1. 회사와 조직의 비즈니스 가치를 명확하게 충족시켜야한다. 유저의 경험을 만족시켜야한다. 유저는 뒷단에 어떤 기술을 활용하여 어떤 설계기법으로 프로그램을 만들었는지는 전혀 관심이 없다. 단지 원하는 기능이 동작하고 오류가 없으며 깔끔한 UX를 제공하는지에 관심이 있다. 또한 회사의 비즈니스 목표를 만족시켜야한다. 2. 코드가 잘 읽혀야한다. 코드를 읽고 분석하는 것이 개발을 하는 시간보다 많이 시간을 소요한다. 코드를 읽고 도메인 로직을 파악하기 쉽계 코드를 짜는 것이 낭비될 수 있는 불필요한 리소스를 절약할 수 있는 방법이 된다. 물론 시스템 전체 아키텍쳐, 데이터 플로우 등 코드로 표현할 수 없는 것들은 별도 기술문서로 표현한다. 3. 테스트 코드 작성이 쉬워야한다. 테스트 코드는 신규 기능 구현,..
-
[Java] Optional<T> 와 OptionalIntJava 2022. 6. 20. 00:17
스트림을 통해 중간 연산 및 최종 연산을 할 경우 반환 타입이 Optional인 경우가 있다. Optional 는 지네릭 클래스로 T 타입 객체를 감싸는 래퍼클래스이다. Optional 객체에 값을 담아서 반환하는 이유는 반환된 결과가 null 인지 매번 체크하는 것 대신 Optional에 정의된 메서드를 통해 처리할 수 있기 때문이다. Optional 객체 생성하기 Optional 객체를 생성할 때에는 of() 또는 ofNullable() 메서드를 사용한다. ofNullable()의 경우 참조 변수의 값이 null 일 가능성이 있을 때 of() 대신 사용한다. (of() 메서드의 경우 매개변수 값이 null이면 NullPointException이 발생한다.) Optional 타입의 참조변수를 초기화 할..
-
[Spring] @Aspect - AOPSpring 2022. 6. 19. 23:53
이전에 공부 하였듯이 자동 프록시 생성기를 통해 스프링 빈에 등록된 Advisor를 스프링이 자동으로 조회하여 해당 Advisor의 Pointcut을 통해 적용 되는 클래스, 메서드를 조회하고 Advice가 적용되어야하는 메서드를 확인한 다음 Advice가 실행되었다. 스프링은 @Aspect 애너테이션을 통해 포인트 컷과 어드바이스로 구성되어 있는 어드바이스를 생성하는 기능을 지원한다. @Aspect 애너테이션이란? AOP(관점 지향 프로그래밍)을 가능하게 하는 AspectJ 프로젝트에서 제공하는 애너테이션. @Aspect public class MyAdvisor { @Around("execution(* 패키지이름..*(..))") public Object execution(ProceedingJoinPo..
-
[Spring] 빈 후처리기 - 스프링이 제공하는 빈 후처리기Spring 2022. 6. 19. 21:22
이전 학습에서 빈 후처리기를 작성하면서 적용되는 대상을 패키지 이름을 주입 받아 적용하는 방식으로 설정해서 활용하였다. 하지만 빈 후처리기가 주입 받는 Advisor에는 Advice와 Pointcut이 있기 때문에 Pointcut을 활용하면 클래스, 메서드 단위의 적용 대상 여부를 설정할 수 있다. - Pointcut 사용 시기 1. 빈 후처리기가 자동 프록시 생성시 : 프록시 적용 대상 여부 체크 후 필요한 곳에만 프록시 적용 - 해당 빈이 프록시를 생성할 필요가 있는지 체크한다 (클래스, 메서드 조건을 모두 비교해서 조건에 맞는 것이 하나라도 있으면 프록시를 생성한다.) 2. 프록시 내부 : 해당 프록시의 메서드 중 어떤 메서드가 호출 되었을 시 Advice가 적용 될지 판단 - 포인트 컷을 통해 프..