프로그래밍언어/프로그래밍 지식(programming knowledge)
-
-
소리치는 아키텍쳐프로그래밍언어/프로그래밍 지식(programming knowledge) 2022. 4. 18. 22:49
아키텍처란 무엇일까? 상황과 범위에 따라 다르겠지만, 애플리케이션을 만들 때 아키텍쳐에 대해 생각해보자. 우선 이 구조를 보고 어떤 애플리케이션인지 파악해보자. domain 을 보니 이 애플리케이션을 계좌와 관련된 무언가를 하는 것으로 보인다. web으로 디렉토리가 빠져있는 것을 보니 delivery 방식은 web을 사용하는 것으로 보인다. persistence는 domain의 AccountRepository를 구현한 것으로 보인다. 표면적으로 도메인 , 영속성, 딜리버리를 구분해서 크게는 이해해볼 수는 있지만 무엇을 하는지 파악하기는 쉽지 않다. 즉, 어플리케이션이 어떤 유스케이스들을 제공하는지 파악할 수 없다. 다른 구조를 살펴보자 이 구조를 보면 계좌와 관련된 것들을 중점적으로 하는 것을 알 수 ..
-
value object(값 객체)프로그래밍언어/프로그래밍 지식(programming knowledge) 2022. 4. 17. 23:57
정의 > Wekipedia In computer science, a value object is a small object that represents a simple entity whose equality is not based on identity: i.e. two value objects are equal when they have the same value, not necessarily being the same object.[1][2] Examples of value objects are objects representing an amount of money or a date range. Being small, one can have multiple copies of the same value ..
-
abstraction level(추상화 수준)프로그래밍언어/프로그래밍 지식(programming knowledge) 2022. 4. 17. 18:10
추상화란 구체적인 것에서 핵심만을 간추려 내는 것이다. 구체와 추상은 상대적인 것이기 때문에 추상화에서도 수준이 생기게 된다. 1) "문서를 출력한다." 2) "문서를 프린터를 이용해 출력한다." 3) "문서를 와이파이 방식의 프린터 이용해 출력한다" 1) "문서를 편집한다" 2) "문서를 텍스트 에디터를 이용하여 편집한다" 3) "문서를 클라우드 서비스를 이용해 텍스트 에디터를 이용하여 편집한다" 1,2,3 순으로 추상화 수준이 점점 낮아진다. 1에서 더 추상화할 수 없다. 따라서 여기까지만 하면 된다. 우리가 작성하는 코드를 보았을 때 1,2,3이 순서대로 나오는가? 아니면 1,2는 없고 3만 나오지는 않는가? 1,2을 건너뛰고 3의 코드를 우리가 본다면 핵심이 무엇인지, 무엇(what)을 하는지 ..
-
dependency(의존관계)프로그래밍언어/프로그래밍 지식(programming knowledge) 2022. 4. 17. 17:54
# 정의 > wekipedia Dependency (computer science) or coupling, a state in which one object uses a function of another object > 해석 A가 B에 의존관계를 가진다고 해보자. A가 B에 의존한다는 것은 A가 있기 위해서는 B가 있어야만 된다는 뜻이다. 즉, A를 이해하기 위해서는 B를 알아야한다는 것을 의미한다. 클래스 A를 만드는 과정에서 B라는 클래스에 의존하게 될 경우 클래스 A를 이해하기 위해선 클래스 B를 살펴보게 된다. 쉽게 생각해 어떤 모듈을 작성할 때 사용하는 모든 것들이 그 모듈의 의존관계가 되는 것이다. 간단한 print라는 함수 하나를 보면 이 print 함수에서는 setnry/logger 와 ..
-
abstraction(추상화)프로그래밍언어/프로그래밍 지식(programming knowledge) 2022. 4. 17. 13:36
# 정의 > wekipedia 정의 추상화(abstraction)는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다. > 해석 추상화란 `구체적인 것에서 핵심을 찾아내는 것`라고 정의할 수 있다 `구체적인 것`과 `핵심`은 무엇일까? `구체적인 것`이라는 것은 상대적인 것이며 상황에 따라 다르다. `A문서를 a4 용지에 좌우 여백은 10으로 하고 상하 여백은 20으로 해서 출력하라` 라는 문장이 있다고 하자. 위 문장에서 핵심은 무엇일까? "A문서를 출력하라" 가 위 문장에서 어떻게 하는지는 숨기고 핵심만 뽑아낸 것이다. 무언가 핵심적인 것만 추려낸 느낌이다. "A문서를 출력하라"에서 더 핵심을 뽑아내기란 어려워 보인다. `A문서를 a4 용지에 좌우 여백은 10..
-
separation of concerns(관심사 분리)프로그래밍언어/프로그래밍 지식(programming knowledge) 2022. 4. 17. 12:07
# 정의 관심사의 분리는 어플리케이션을 구분되는 영역으로 나누며 각 영역은 분리된 관심사를 가진다. 이것의 목적은 잘 조직화된 시스템을 만드는 것이며 이를 통해 변경에 적합한 어플리케이션이 된다. 관심사 분리는 소프트웨어 아키텍쳐 디자인 원칙이다. # 어떻게 관심사의 분리를 할 수 있는가 소프트웨어 아키텍쳐에서 관심사의 분리는 경계(boundaries)를 만드는 것을 통해 만들어진다. 여기서 경계는 논리적이거나 물리적인 어떤 것이든 가능하다. 함수, 객체, 컴포넌트 서비스등 어떤 방식이든 분리가 되면 된다. 적용되는 범위도 어디든 가능하며 프로젝트, 솔루션, 폴더 구조, 어플리케이션 레이어 등 다 가능하다. 대표적인 예로는 백앤드 서비스에서 데이터 저장의 관심사를 repository 라는 레이어로 나누는..
-
single responsibility principle(단일 책임 원칙)프로그래밍언어/프로그래밍 지식(programming knowledge) 2022. 4. 17. 11:34
# 객체 지향 프로그래밍에서 정의 > wikipedia 정의 객체 지향 프로그래밍에서 단일 책임 원칙이란 모든 클래스는 하나의 책임(변경하려는 이유)만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함을 일컫는다. 클래스가 제공하는 모든 기능은 이 책임과 주의 깊게 부합해야 한다. 단일 책임 원칙은 로버트 마틴의 객체 지향 설계 원칙이란 문서의 같은 이름을 가진 단락에서 소개되었다. 로버트 마틴은 책임을 변경하려는 이유로 정의하고, 어떤 클래스나 모듈은 변경하려는 단 하나 이유만을 가져야 한다고 결론 짓는다. 예를 들어서 보고서를 편집하고 출력하는 모듈을 생각해 보자. 이 모듈은 두 가지 이유로 변경될 수 있다. 첫 번째로 보고서의 내용 때문에 변경될 수 있다. 두 번째로 보고서의 형식 때문에 변경될 수..