본문 바로가기

Develop167

협력, 역할, 책임의 관점에서 바라본 객체지향 세계 객체지향 개발을 하는 사람이라면 누구나 이해해야할 개념이 있다. 바로 협력,역할,책임이다. 오늘은 협력, 역할, 책임의 관점에서 객체지향을 어떻게 잘 설계할 수 있을지를 글로 작성해보려 한다. 협력 개체지향 세계는 동일한 목적을 달성하기 위해 객체끼리 서로 협력하는 세상이다. 여기서 나오는 협력이라는 단어는 객체지향 설계를 논할때 가장 중요한 요소 중 하나이다. 협력은 여러가지의 요청과 응답에 의해 이루어진다. 여기서 각 요청과 응답은 서로 연결된 채 유지된다. 즉 , 서로 관계를 맺는다는 얘기다. 요청과 응답은 서로 관계를 맺으며 객체가 수행할 책임을 명확하게 만든다. 어떤 대상에 대해 어떠한 요청을 한다면 요청을 받은 대상은 해당 요청을 처리할 책임이 주어진다. 이렇게 객체가 다른 객체에게 책임을 수.. 2022. 10. 10.
[Design Pattern] 빌더 패턴 정리 빌더패턴은 디자인 패턴 중 생성 패턴 중 하나이다. 빌더는 복잡한 Object들을 단계별로 구축할 수 있게 해준다. 이 패턴을 활용하면 동일한 구성코드를 통해 다양한 타입과 표현을 제공받을 수 있다. 쉽게말해서 이 패턴을 이용해 우리는 객체를 편리하게 만들어 낼 수 있다. 기존에 우리는 빌더 패턴없이 setter 메서드를 활용하거나 생성자를 이용해 객체를 생성해왔다. 아래는 setter 를 이용한 객체생성의 예시이다. setter public class Person { private String name; private int age; public void setName(String name) { this.name = name; } public void setAge(int age) { this.age =.. 2022. 9. 27.
객체 바로알기 - 협력, 행동, 상태, 식별자 객체지향 세계는 실세계와 유사하다. 허나 면밀히 살펴보면 기이한 세상이다. 객체지향 세계에서 객체는 단순히 실세계를 모방하고 추상화한 존재가 아니다. 하나하나가 생명이 부여되어 살아 숨시고 있다. 모든 사물이 영화 아이언 맨의 '자비스'처럼 스스로 생각하고 해동한다. 객체지향 세계에서 객체는 실세계의 객체보다 훨씬더 많은 능력과 특성을 보유하고 있다. 오늘은 이 객체에 대해 면밀히 살펴보도록 하겠다. 객체지향 세계에서 객체는 식별이 가능한 개체나 사물을 뜻한다. 객체는 컴퓨터, 키보드같은 사물이 될 수도 있고 사랑, 우정 같은 추상적인 개념이 될 수도 있다. 객체는 구별가능한 식별자, 객체만의 특징을 가진 행동, 행동에 따라 변경되는 상태로 구성된다. 객체를 행동, 상태 그리고 식별자의 관점에서 살펴보자.. 2022. 9. 14.
객체지향 설계 - 책임, 역할, 협력 개발 관련 일을 한지 5년정도 되다보니, 이제는 구현뿐만 아니라 설계적인 능력도 중요하게 되었다. 요즘 하나의 기능을 추가해도 깔끔하게 설계를 한 뒤에 프로그래밍하는 것이 습관이 되었다. 오늘은 객체지향 설계의 가장 중요한 요소인 책임, 역할, 협력의 관점에서 어떻게 설계를 해야할 지를 풀어나가 볼 예정이다. 대학생 때, 교수님 한분이 그런 말씀을 하셨다. "객체지향은 실세계를 모방하여 구현하는 것이 아니라 새로운 세계를 창조하는 것이다." 예전에 이말이 참 이해가 안되었는데, 실무를 경험하다 보니 조금은 이해가 된다. 객체지향은 말그대로 실세계를 조금 참고하여, 새로운 세계를 만들어내는 것이다. 우리는 실세계의 다양한 부분을 통해 객체지향의 기본 사상을 이해하고 학습한다. 객체지향 세계에서 모든 일은 .. 2022. 9. 6.
객체지향 설계를 위한 추상화 메커니즘 정리 하이! 오늘은 객체지향의 개념중 가장 중요하다 할 수 있는 추상화에 대해 총정리 해두려고 한다. java나 c#등 객체를 이용한 , 객체를 지향하는 다양한 언어가 있다. 객체지향으로 짜여진 프로그램에서는 무수히 많은 객체가 서로 메시지를 주고 받으며 협력한다. 너무나 많은 객체가 있다보니 이를 효율적이고 단순하게 관리할 필요가 있다. 객체지향에서는 대표적으로 추상화라는 방식을 통해 복잡한 도메인을 단순화 시키고 직관적으로 만든다. 추상화란 현실을 어느정도 반영하되, 구체적인 사물간의 공통점은 취하고 차이점은 버리는 분류를 통해, 그리고 중요한 부분을 강조하기 위해 불필요한 세부사항은 버리는 일반화를 통해 이루어진다. 아래는 객체지향에서 활용하는 추상화 메커니즘을 정리해 놓은것이다. -분류와 인스턴스화 -.. 2022. 9. 2.
[Design Pattern] 팩토리 패턴 총정리 Factory를 활용한 패턴은 객체생성의 역할을 별도의 클래스에 위임하는 것이 가장 큰 목표이다. 흔하게 실무에서 사용하는 패턴 중 팩토리를 사용하는 패턴은 팩토리 메서드 와 추상 팩토리 패턴이다. 우선 패턴을 제대로 알기전에 기본적으로 팩토리가 어떻게 사용되는지를 알아보자. 1. Simple Factory 팩토리의 기본적인 개념은 생성자 호출을 별도의 클래스인 팩토리에게 시킴으로써 호출하는 쪽이 객체의 생성자에 직접 의존하지 않도록 하는것이다. 만약 직접 의존하는 경우는 나중에 코드가 변경될 때 수정해야하는 코드의 범위가 늘어나게 된다. 간단한 예를 통해 구체적으로 알아보자. 예시는 결제시스템 개발을 위해 신용카드 정보를 생성하는 것으로 가정한다. public interface CreditCard { .. 2022. 8. 23.
[git] untracked file 삭제하기 오랜만에 글을 쓴다. 요즘 Git을 이용해서 프로젝트를 하는데, 아래 그림처럼 Untracked File 이 계속 노출되어 있다. Tracked File 과 Untracked File Git에서는 두가지 형태의 파일이 존재한다. Tracked File Tracked File 은 말그대로 Git에서 관리해주는 파일을 의미한다. Tracked File 은 세부적으로 세가지 상태로 나뉘어진다. 1.Unmodified : 파일이 수정되지 않은 상태를 의미. 파일이 최근에 저장된 상태 그대로라고 보면됨 2.Modified : 파일이 수정된 상태를 의미. 3. Staged: 파일을 저장할 예정인 상태 이 세가지의 경우가 Git에 의해 관리되고 있는 파일, 즉 Tracked File 이다. Untracked FIle.. 2022. 7. 14.
[Clean Architecture] 경계 간 모델 매핑 전략 이전 포스팅에서 헥사고날 아키텍처에 대해 포스팅을 좀 했었다. https://devkingdom.tistory.com/341 [Clean Architecture] 계층형 아키텍처의 문제점을 해결하는 육각형 아키텍처(헥사고날 아키텍처) 얼마전에 계층형 아키텍처의 문제점에 다뤘었다. https://devkingdom.tistory.com/340 [Clean Architecture] 계층형 아키텍처의 문제점 최근에 "만들면서 배우는 클린 아키텍처"라는 책을 정독했다. 요즘 웹 아 devkingdom.tistory.com 오늘은 User 도메인에서 비밀번호 변경 로직을 처리하는 상황가정하고 각 계층의 모델을 어떻게 매핑할 지에 대해 포스팅 해보도록 하겠다. 매핑하지 않기 전략 매핑하지 않기 전략은 말그대로 매피.. 2022. 4. 25.
[Clean Architecture] 육각형 아키텍처 - 영속성 계층 구현 이전 포스팅에서 웹 계층인 Controller를 어떻게 설계하면 좋을지를 다뤘었다. https://devkingdom.tistory.com/343 [Clean Architecture] 육각형 아키텍처 - 웹 어댑터 (컨트롤러) 이전 포스팅에서 육각형 아키텍처가 무엇인지? 그리고 패키지 구조는 어떻게 잡아야하는지? 등을 포스팅했었다. 혹시 포스팅을 놓쳤다면 아래 링크를 통해 공부하고 오면 좋을듯하다. 1.육각형 devkingdom.tistory.com 오늘은 코어를 중심으로 (그림상) 오른쪽에 있는 영속성 계층을 어떻게 설계하면 좋을지에 대해 조금 다뤄보도록 하겠다. 보통 MVC 관련 프로젝트르 하다보면 하나의 딜레마에 빠지게 된다. 바로 데이터베이스 주도 설계를 하게 되는 것이다. 이는 일반적으로 사용하.. 2022. 4. 17.