Study 9

[Panda] 객체지향의 사실과 오해 7장

마틴 파울러가 제시한 객체지향 설계는 세 가지 상호 연관된 관점인 개념 관점, 명세 관점, 구현 관점을 통해 소프트웨어 개발을 바라보는 방식을 제공한다. 각 관점은 동일한 객체를 다른 시각에서 이해하는 방법으로, 설계의 핵심 요소가 된다. 이 글에서는 이 세 가지 관점을 커피 전문점의 예시를 통해 설명하고, 코드와 함께 이를 구체화한다. 1. 개념 관점 (Conceptual Perspective)개념 관점은 도메인에 존재하는 개념과 그 개념들 사이의 관계를 반영하는 데 중점을 둔다. 도메인이란 사용자가 관심을 갖는 특정 주제나 문제 영역을 의미하며, 소프트웨어는 이를 해결하기 위해 개발된다. 이 관점에서는 소프트웨어 객체들이 현실 세계의 개념을 얼마나 잘 반영하느냐가 중요하다.커피 전문점을 예시로 들면,..

05. 큐란?

01. 큐란?영어 queue는 줄을 의미하는 단어이다.가장 먼저 들어온 것이 가장 먼저 나가는 큐방식으로 넣고 빼는 자료구조를 큐라고 한다.선입선출, FIFO(First-in-First-Out) 방식이라고 부리기도 한다.LIFO 형식인 스택과 비교하면서 공부하는 것이 좋다. front: 큐의 맨 앞에 있는 원소, 제일 먼저 큐에 들어온 원소tail: 큐의 맨 뒤에 있는 원소, 제일 나중에 큐에 들어온 원소큐에서 삽이할 때는 삽입할 원소를 알려주어야하지만 삭제할 때는 단순히 삭제하면 된다.스택에서 삭제는 무조건 최근에 들어간 원소를 대상으로 하기 때문이다. 다음은 필요한 작업들의 명시한 큐의 추상 데이터 타입이다.작업들 중 앞의 3개는 큐의 핵심 작업이고, 뒤에 2개는 거의 모든 자료에 공통으로 들어가는 ..

[Panda] 03. List 리스트

01. 리스트란리스트는 대표적인 자료구조 중 하나로 '줄 세워져 있는 데이터' 또는 '죽 늘어선 데이터'를 의미한다. 리스트를 관리하기 위해 필요한 작업은 다음과 같을 것이다.다음은 리스트가 어떤 작업으로 구성된 자료구조인지를 알려주는 ADT 리스트이다.i번째 자리에 원소 x를 삽입한다.i번째 원소를 삭제한다.원소 x를 삭제한다.원소 x가 몇번째 원소인지 알려준다.리스트의 사이즈(원소의 총 수)를 알려준다.파이썬은 리스트를 기본 자료구조로 제공하여 더 많은 작업을 지원하지만 자바는 언어 자체에서 ㅣ릇트를 기본 자료구조로 제공하지 않고 java.util 패키지에서 제공한다. 리스트의 구현리스트를 구현하는 두 가지 대표적인 방법배열에 원소들을 쭉 배치하는 방법 링크를 이용해 원소들을 연결하는 방법(연결 리스..

[Panda] 02. 자바 기초

01. 클래스자바에서 가장 중요한 용어 중 하나가 클래스이다.클래스는 객체를 만드는 수단이고 객체 지향 언어인 자바는 모든 것이 클래스를 중심으로 구성된다.클래스는 어떤 대상을 추상화하는 의미 단위이기도 하다. 메서드 중에 클래스이름과 동일한 메서드를 생성자라한다.생성자는 해당 클래스의 객체가 하나 만들어질 때 자동으로 수행되어 객체를 초기화하는 역할을 한다.클래스의 필드나 메서드를 선언할 때는 public, private 같은 접근 지정자로 공개범위를 정해주어야한다.객체 지향의 핵심 철학 중 하나가 불필요한 외부 노출은 지양하는 것이므로 접근 지정자를 이요해 필요한 만큼만 클래스 바깥으로 공개하는 것이 좋다. 메서드 중 main() 메서드는 프로그램의 수행을 시작하는 메서드로 제일 먼저 실행된다. 이 ..

[Panda] 01. 자료구조와 시간복잡도

01. 자료구조란?자료구조: 데이터(자료)에 효율적으로 접근하고 수정할 수 있도록 저장, 조직, 관리하는 방법에 관한 이론알고리즘: 문제 해결 작업을 수행하기 위해 입력을 받아 원하는 출력을 만들어내는 과정을 기술한 것 자료구조는 문제 해결에 사용할 부품자료구조는 알고리즘에서 부품 같은 역할을 한다.자료구조를 몰라도 프로그램을 작성할 수 있다. 그러나 자료 구조를 모르고 프로그램을 작성하는 것은 재료의 속성이나 구조물의 구성 방법을 모르고 건축물을 만드는 것이다.자료구조에 대해 잘 이해하고 있어야 적절한 곳에 적절한 코드 사용 및 조합하고 내구성 있는 프로그램을 만들 수 있다. 자료구조를 구현, 사용, 결합하는 과정에서 수학적 사고(특히 이산수학)도 크게 도움된다. 사고가 체계적일 수록 자료구조를 사용한..

[Panda] 객체지향의 사실과 오해 4장

4장 역할, 책임, 협력 최후통첩 게임은 인간을 바라보는 두 가지 관점의 충돌을 잘 설명해준다.인간의 본연적 특성에서 인간은 이기적이고 합리적인존재이지만 타인과 관계를 맺는 과정 속에서 인간은 본연의 특성을 배제하고 자신의 이익을 최소화하는 불합리한 선택을 하기도 한다는 것이다.인간의 행동을 결정하는 것은 인간의 본질적인 특성이 아니라 각 개인이 처해 있는 정황 또는 문이다.여기서 문맥은 타인과의 협력이다. 협력에 얼마나 적절한지에 따라 행동의 적합성이 결정되며 협력이 인간의 행동 방식을 결정한다. 객체의 세계에서도 마찬가지이다.개별 객체가 아니라 객체들 사이에 이루어지는 협력이 중요하다. 객체지향 설계의 전체적인 품질을 결정하는 것은 개별 객체의 품질이 아니라 여러 객체들이 모여 이뤄내는 협력의 품질이..

[Panda] 객체지향의 사실과 오해 3장

03. 타입과 추상화 책은 지하철 노선도를 추상화한 해리 백 이야기로 시작한다.승객들이 지하철을 쉽게 이용할 수 있는 이유 중 하는 단순하고 직관적으로 역 간의 네트워크를 표현하는 지하철 노선도가 있기 때문이다. 초기 지하철 노선도는 실제와 유사한 물리적 지형 위에 운행 노선과 불규칙적인 역간 거리를 사실적으로 묘사했다. 그러나 이런 사실적인 정보는 승객들이 노선도를 이해하기 어렵게 만들었다.지하철을 이용하는 승객들의 목적은 하나의 역에서 다른 역으로 이동하는 것이기에 어떤 역에서 출발 및 환승을 해야하는지, 어떤 역을 거쳐야만 가장 쉽고 빠르게 목적지에 도착할 수 있는지 등을 직관적이고 단순하게 보여주는 것이 중요하다. 즉 지하철 노선도 디자인에서 중요한 것은 사실적인 묘사가 아니라 역과 역 사이의 연..

[Panda] 객체지향의 사실과 오해 2장

2장 이상한 나라의 객체객체지향과 인지능력소프트웨어 세계 역시 인간이 인지할 수 있는 다양한 객체들이 모여 구성되지만 객체지향 패러다임의 목적은 현실 세계를 기반으로 새로운 세계를 창조하는 것이기 때문에 두 세계에 존재하는 객체를 일반적으로 서로 전혀 다른 모습을 보인다.  이번 장은 심리학자인 엘리자베스 스펠크와 필립 켈만이 어린 아기들이 물체를 인지하는 방법을 연구하기 위해 실행한 실험으로 시작한다. 이 실험으로 알 수 있는 것은 사람은 태어난지 얼마 안 된 시기부터 함께 행동하는 물체를 하나의 개념으로 인지한다는 사실이다.물체가 여러 부분으로 구성되어 있더라도 함께 움직일 경우 그 물체를 하나의 유기적인 단위로 인식한다는 것.인간의 인지능력은 물리적인 경계를 넘어 추상적인 사물까지도 객체로 인식한다..

[Panda] 객체지향의 사실과 오해 1장

실세계의 모방이라는 개념은 객체지향의 기반을 이루는 철학적인 개념을 설명하는 대는 적합하지만 실용적인 관점에서의 객체지향을 설명하기에는 적합하지 않다.애플리케이션을 개발하면서 객체에 직접적으로 대응되는 실세계의 사물을 발견할 확률 낮기 때문. 객체지향의 목표는 실세계를 모방하는 것이 아니라 새로운 세계를 창조하는 것이다.소프트웨어 개발자의 역할이 단순히 실세계를 소프트웨어 안으로 옮겨 담는 것이 아니라 고객과 사용자를 만족시킬 수 있는 신세계를 창조하는 것처럼 말이다. 그러나 실세계의 모방이라는 개념을 사용하면 '캡슐화'와 소프트웨어 객체의 '자율성' 등 객체지향의 다양한 측면을 쉽게 설명할 수 있다.현실 세계의 사람들이 암묵적인 약속과 명시적인 계약을 기반으로 협력하며 목표를 달성해 나가는 과정은 '메..