객체지향

객체지향

Layered Architecture란

Layered Architecture란 무엇일까요? 웹 개념을 접하다 보면 해당 키워드에 대해 자주 듣게 됩니다. 따라서 이번 아티클에서는 Layered Architecture에 대해 정리해보려고 합니다. 소프트웨어 아키텍처란? 우선 소프트웨어 아키텍처에 대해 이야기해보려고 합니다. 소프트웨어 아키텍처는 정말 간단하게 말하면 하나의 소프트웨어 구조입니다. 그렇지만 일반적으로 저희가 일상생활에서 이야기하는 구조와는 조금 다른 점이 존재합니다. 소프트웨어 아키텍쳐는 단순한 구조에서 그치지 않고 조금 더 고수준의 개념을 의미합니다. 즉, 소프트웨어 아키텍쳐는 구조 및 코드 배치를 초월해 구성 요소 간 협력, 의존성 등까지 설계하는 것을 포함합니다. 소프트웨어 아키텍처는 저울질의 결과물이다 이런 소프트웨어 아키..

객체지향

우아한 객체지향 정리 (조영호님)

설계에 대한 핵심은 의존성이다. 역할, 책임, 협력에 대한 이야기를 주로 하지만, 그 세 가지가 필요한 이유도 의존성 때문이다. 의존성 관리에 따라 설계가 어떻게 바뀌는지 단계별로 보여주려고 한다. Part1 - 의존성이란? 설계가 뭔가요? -> 코드를 어떻게 배치하는지에 대한 의사결정 어떤 클래스에, 어떤 패키지에, 어떤 프로젝트에 코드를 넣을 것인가. 배치하는 기준은 변경이 되어야 하고, 이는 즉 의존성을 의미함. 의존성이란 -> 변경에 의해 영향을 받을 수 있는 가능성. 그러나 설계를 잘하면 영향을 받지 않을 수도 있음. 의존성은 1. 클래스 간, 2. 패키지 간 의존성으로 크게 두 가지로 나뉨. 클래스 의존성 클래스 의존성은 총 4가지가 존재함. 연관 관계: 객체 참조가 영구적으로 존재하는 경우...

객체지향

왜 상태와 행위를 한 곳에서 관리해야할까?

상태와 행위를 한 곳에서 관리하라 객체지향을 접한 뒤로, 나는 상태와 행위를 한 곳에서 관리 하라는 이야기를 많이 들었다. 상태와 행위가 한 곳에 없으면 어떻게 되길래 안된다고 하는걸까? 직접 실험해보자. 주관적인 내용이 많이 포함되어 있습니다. 오늘도 역시 자동차 경주 게임이 예시다. public class Car { private int position; public Car(final int position) { this.position = position; } public void setPosition(final int position) { this.position = position; } public int getPosition() { return position; } } 위와 같은 자동차 객체가..

객체지향

[객체지향의 사실과 오해] 6장: 객체 지도

유일하게 변하지 않는 것은 모든 것이 변한다는 사실뿐이다. 경로가 아닌 지도를 만들어라 어떤 사람이 A라는 마을로 이동하려고 하는데, 길을 모른다고 가정해보자. 지나가던 다른 사람에게 A라는 마을로 어떻게 가냐고 묻자, "저기서 오른쪽으로 가서, 200m정도 앞으로 간 뒤 ..." 라고 답한다. 결국 경로를 알려준 은인덕분에 A라는 마을에 도달할 수 있었다. 이것은 기능적이고 해결책 지향적인 접근법이다. A라는 마을에 도달하기 위한 해결책, 즉 기능만 제공한다. 반면 지도를 사용하는 경우는 어떨까? A 라는 마을 뿐만 아니라, B, C 라는 마을의 정보까지도 한 눈에 확인할 수 있다. 또한 추상화가 적절히 이루어졌기에 경로를 쉽게 파악할 수 있다. 지도는 구조적이고 문제 지향적인 접근법이다. 지도는 A ..

객체지향

[객체지향의 사실과 오해] 5장: 책임과 메세지

자율적인 책임 훌륭한 객체지향의 세계는 명확하게 정의된 역할과 책임을 지닌 객체들이 상호 협력하는 세계다. 즉, 자율적인 객체가 상호 협력하는 세계이다. 자율성이란? '자기 스스로의 원칙에 따라 어떤 일을 하거나 자신을 통제해서 절제하는 성질'이나 특성을 의미한다. 적절한 책임은 자율적인 객체를 낳고, 자율적인 객체들이 모여 유연하고 단순한 협력을 낳는다. 따라서 협력에 참여하는 객체가 얼마나 자율적인지가 전체 애플리케이션의 품질을 결정한다. 이상한 나라의 엘리스 이야기에서 왕이 증인들을 불러 증언하라고 하는 내용이 나온다. 이 이야기에서 중요한 점은, 왕은 증인석에 앉은 인물이 누가 되었든 간에 '중언하라'라고 말할 뿐이라는 점이다. '증언하라' 라는 메세지는 증인의 자율성을 충분히 보장한다. 어떻게 ..

객체지향

[객체지향의 사실과 오해] 4장: 역할, 책임, 협력

협력이 객체를 결정한다 전통적인 경제학은 인간을 '이기적인 동시에 합리적인 존재'라고 칭한다. 그러나 다수의 실험 결과는 그렇지 않다. 인간의 본성은 이기적이고 합리적이지만, 행동을 결정하는 건 이런 본성이 아닌 문맥(context)이다. 인간이 어떤 상황에 처해있는지가 인간의 행동을 결정한다. 객체지향 세계에서도 마찬가지로 협력이라는 문맥이 객체의 행동 방식을 결정한다. 중요한 것은 개별 객체가 아닌, 객체들 사이에 이뤄지는 협력이다. 협력이 자리를 잡으면 저절로 객체의 행동이 드러나고, 뒤이어 객체의 상태가 결정된다. 협력에서 발생하는 책임 협력은 혼자만의 힘으로 문제를 해결하기 어렵기 때문에 발생하고, 요청과 응답으로 구성된다. 요청은 또 다른 요청을 연쇄적으로 발생시키기도 한다. 요청과 응답의 개..

객체지향

[객체지향의 사실과 오해] 3장: 타입과 추상화

훌륭한 프로그램을 작성하기 위한 중요한 전제 조건은 추상화를 정확하게 다루는 능력이다. 지하철 노선도는 추상화의 대표적인 예시이다. 실제 지형적인 측면을 따져보면 역 간의 거리, 위치는 모두 정확하지 않다. 그럼에도 위와 같은 지하철 노선도가 널리 사용되는 이유는 승객의 목적에 부합하기 때문이다. 승객의 목적은 하나의 역에서 다른 역으로 이동하는 것이다. 즉, 승객이 원하는 것은 어떤 역에서 출발하는지, 어떤 역에서 환승하는지, 어떤 역을 거쳐야 하는지를 알아내는 것이다. 따라서 위 노선도는 승객이 원하는 정보만 제공하는 데 특화되었으며, 목적과 무관한 정보를 제거했다. 추상화를 통한 복잡성 극복 현실은 복잡하다. 법칙은 단순하다. 버릴 게 무엇인지 알아내라. - 리처드 파인만 현실은 복잡하며 예측 불가..

객체지향

[객체지향의 사실과 오해] 2장: 이상한 나라의 객체

인간의 인지능력과 객체지향 3개월 정도 된 아기들도 선천적인 인지능력을 가진다. 세상을 뚜렷한 경계를 가진 객체들의 집합으로 본다는 것이다. 인간은 이런 인지능력을 통해 세상을 이해한다. 도로 위에는 수많은 자동차가 존재한다. 제조회사도 다르며, 색깔도 다르고, 문의 개수도 다르다. 그럼에도 우리는 이들을 통틀어 '자동차'라고 한다. 인간은 본능적으로 세상을 독립적이고 식별 가능한 객체의 집합으로 바라본다. 이것이 많은 사람들이 객체지향이 이해하기 쉬운 패러다임이라고 말하는 이유다. 객체지향은 인간의 기본적인 인지능력에 기반을 두고 있기 때문이다. 이렇게 세상을 더 작은 객체로 분해하는 것은 세상의 복잡성을 극복하기 위함이다. 객체지향 패러다임도 마찬가지다. 소프트웨어의 세계 역시 인간이 인지할 수 있는..

객체지향

[객체지향의 사실과 오해] 1장: 협력하는 객체들의 공동체

시너지를 생각해라. 전체는 부분의 합보다 크다. 객체지향과 실세계의 관계 객체지향은 실세계의 투영이자 직접적으로 모델링하는 패러다임일까? '실세계의 모방' 이라는 개념은 객체지향의 기반을 이루는 철학적인 개념을 설명하는 데는 적합하지만, 유연하고 실용적인 관점에서 객체지향 분석, 설계를 설명하기에는 적합하지 않다. 애플리케이션을 개발하면서 객체에 직접적으로 대응되는 실세계의 사물을 발견할 확률은 그다지 높지 않다. 그런 객체가 존재한다고 하더라도 객체와 사물 간의 개념적 거리는 유사성을 찾기 어려울 정도로 매우 먼 것이 일반적이다. 방화벽이 화재의 확산이 아니라 네트워크 침입을 막는다고 해서 문제가 되는가? 객체지향은 실세계를 모델링하는 것이 아닌, 실세계를 '기반'으로 새로운 세상을 창조하는 것이다. ..

teo_99
'객체지향' 카테고리의 글 목록