목록전체보기 (19)
결국엔 프로그래밍
5장 책임에 초점을 둔 설계의 가장 어려운 점은 어떤 객체에게 어떤 책임을 할당할지를 정하는 것이다. GRASP 패턴은 이러한 어려움을 해결할 수 있게 도와준다. 01. 책임 주도 설계를 향해 데이터 중심의 설계에서 책임 중심의 설계로 전환하기 위해 데이터보다 행동을 먼저 결정하자 협력이라는 문맥 안에서 책임을 결정하자 데이터보다 행동을 먼저 결정하자 너무 이른 시기에 데이터에 초점을 맞추면 캡슐화가 악화되기 때문에 낮은 응집도와 높은 결합도를 가진 객체들이 생기게 되고 변경에 취약한 설계가 된다. 따라서 객체의 책임을 결정한 후에 객체의 상태를 결정하는 책임 중심의 설계를 해야 한다. 협력이라는 문맥 안에서 책임을 결정하자 책임은 객체의 입장이 아니라 객체가 참여하는 협력에 적합해야 한다. 협력을 시작..
다형성 하나의 객체가 많은 형을 가질 수 있는 성질 대한민국 국민인 동시에 , 남자이고, 서울에 사는 등 어떤 사물을 여러 가지 시선으로 보는 모습을 생각하면 쉽다. 하나의 객체를 여러 개의 type으로 혹은 하나의 type으로 객체가 여러 가지 모습으로 해석될 수 있는 성격 상속 관계에 있을 때 조상 클래스 type으로 자식 클래스를 레퍼런스 할 수 있다. 조상을 무작정 자손으로 바꿀 순 없다. 조상 type 배열에 자식 type을 넣을 수 있다. (Object는 모든 클래스의 조상이기 때문에 Object type의 배열에 모든 type을 담을 수 있다. (ex. println())) 같은 그룹에 속하는 클래스들의 동일한 메서드를 호출할 때 자식 클래스들이 각자의 다른 로직을 수행하고 리턴한다. (ex..
객체지향 설계의 핵심은 협력, 역할, 책임이다. 이 중에서도 가장 중요한 것이 '책임'이다. 책임은 객체지향 애플리케이션의 품질을 결정한다. 객체지향 설계란 올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 것이다. 즉, 객체지향 설계의 핵심이 책임이고 책임을 할당하는 과정이 응집도, 결합도와 연관되어있다. 설계라는 것은 변경을 위해 존재하고 변경 시에는 반드시 비용이 발생한다. 훌륭한 설계란 적절한 비용 안에서 쉽게 변경할 수 있는 응집도가 높고 서로 느슨하게 결합된 요소로 구성된 설계이다. 그렇다면 응집도를 높이기 위해선 어떡하면 되느냐? 객체의 상태가 아니라 객체의 행동에 초점을 두면 된다. 다시 말해 객체의 책임에 초점을 두는 것이다. (이는 데이터 중심 ..
객체지향에서 가장 중요한 것은 역할, 책임, 협력이다. 클래스, 상속, 지연 바인딩도 중요하지만 구현 측면에 치우쳐있어 객체지향 패러다임의 본질과는 거리가 있다. 어떤 협력이 필요하고 협력을 위해 어떤 역할과 책임이 필요한지 고민해야 한다. 협력 - 객체들이 애플리케이션 기능을 구현하기 위해 수행하는 상호작용 책임 - 객체가 협력에 참여하기 위해 수행하는 로직 역할 - 객체들이 협력 안에서 수행하는 책임들이 모여 역할을 이룬다. 협력 객체는 사회적 존재이다. 메시지 전송을 통해서 객체들은 상호작용한다. 메시지를 통해 다른 객체에게 위임하거나 서로 협력한다. 메서드를 통해 수신한 메시지를 처리한다. 자율적인 객체가 되기 위해 필요한 정보와 이에 기반한 행동을 하나의 객체에 둬야 한다. 만약, A라는 객체가..
상속과 인터페이스 일반적인 상속의 목적은 메서드나 인스턴스 변수를 재사용하는 것으로 생각되지만, 부모 클래스가 제공하는 모든 인터페이스를 자식 클래스가 물려받을 수 있기 때문에 상속은 가치 있다. 결과적으로, 자식 클래스는 부모 클래스가 수신할 수 있는 모든 메시지를 수신할 수 있기 때문에 외부 객체는 자식 클래스를 부모 클래스와 동일한 타입으로 간주할 수 있다. 따라서, 부모 클래스가 나오는 모든 자리에서 자식 클래스가 부모 클래스를 대신해 사용될 수 있다. (업 캐스팅) 다형성 동일한 메시지를 전송하더라도 어떤 메서드가 실행될 것인지는 객체의 클래스가 무엇이냐에 따라 달라지는 특성 상속 → 동일한 인터페이스 사용 → 하나의 계층 → 객체들이 서로 같은 메시지들을 이해 → 서로 다른 메서드를 실행 가능..
보호되어 있는 글입니다.
예제에 관해 2장은 예제로 영화 예매 시스템을 다루고 있다. 예제의 특징 중 하나를 짚고 넘어가자면, '영화'와 '상영'을 구분짓고 있다. '영화'란 영화 그 자체를 말한다. 기본적인 영화의 제목, 상영 기간 등의 정보를 갖고 있다. '상영'은 우리가 흔히 예매하는 대상을 의미한다. '영화'와 상영 시간 등의 정보를 갖고 있다. 각 '영화'는 하나의 '할인 정책'을 갖는다. 그리고 '할인 조건'은 복수될 수 있다. 객체지향 프로그래밍을 할 때 1) 어떤 객체들이 필요한지 고민하라. 객체를 중심에 두는 접근 방법은 설계를 단순하고 깔끔하게 만든다. 2) 각 객체를 협력하는 공동체의 일원으로 보라. 객체를 협력하는 공동체의 일원으로 보는 것은 설계를 유연하고 확장 가능하게 만든다. 도메인의 구조를 따르는 프..
패러다임 현대의 패러다임이란, 한 시대 혹은 사회 전체가 공유하는 이론이나 방법, 문제의식 등의 체계 이 책에서 패러다임의 전환이란, 절차형 패러다임에서 객체지향 패러다임으로의 변화를 의미 프로그래밍 패러다임 개발자 공동체가 동일한 프로그래밍 스타일과 모델을 공유할 수 있게 하고, 불필요한 부분에 대한 의견 충돌을 방지함 프로그래밍 패러다임을 교육시킴으로써 동일한 규칙과 방법을 공유하는 개발자로 성장할 수 있도록 준비시킴 모듈은 1) 실행이 가능해야 하고 2) 변경에 용이해야 하며 3) 코드를 통해 의사소통이 가능해야 한다 설계의 목표 설계의 목표는 결합도를 낮춰 변경이 용이한 설계를 만드는 것이다. 캡슐화를 통해 객체 내부로의 접근을 제한, 객체와 객체 사이의 결합도를 낮출 수 있고 설계를 좀 더 쉽게..
2021년 10월 26일 스터디 카페에서 간 졸이며 혹여나 내가 틀리게 작성한 부분이 있진 않을까 걱정하면서 지원했다. 2021년 11월 13일 오전 9시였던 SW 역량테스트를 보던 중 서버에 문제가 생겨 15시에 시험을 다시 보는 웃지 못할 해프닝을 겪으며 SW역량테스트를 치렀다. 2021년 11월 21일 약 83회의 수정을 거치면서 주변의 모든 전공자 뿐 아니라 초면인 분들에게까지 도움을 부탁드리며 피드백을 받아 에세이를 제출했다. 2021년 11월 29일 오후 5시 인터뷰 준비를 위해 도서관을 가려던 그 순간, 싸피 사무국에서 문자가 왔고 확인 해 본 결과 '인터뷰 대상자'로 선정되었음을 확인했다. 2021년 12월 10일 오전 10시 전 날 삼성 인재 개발원 바로 앞에 사는 친구의 집에서 신세를 ..
SSR vs CSR SSR(server-side rendering) 과 CSR(client-side rendering)을 알아보기 위해 각각의 정의와 둘의 차이점 그리고 어떤 상황에서 어떤 방식을 사용하는 것이 적절할지에 대해 정리한다. SSR이란? SSR은 server-side rendering을 의미한다. 이것은 웹 어플리케이션이 웹 페이지를 브라우저에서가 아닌 서버에서 렌더링하는 방법이다. 이 방법을 사용한다면 페이지가 클라이언트 사이드에 도착했을 때 이미 렌더링된 상태일 것이다. 서버 사이드에서 요청을 받은 경우, 서버는 모든 것을 컴파일한다. 만약 페이지가 데이터베이스로부터 데이터를 가져오기를 원한다면 서버가 그 작업을 수행할 것이다. 그 다음 완전히 렌더링 된 페이지에 데이터를 렌더링하고 이를..