반응형

IT Book 21

[Clean Code] 6. 객체와 자료구조 - 클린 코드 정독하기

변수를 private로 정의하는 이유는 남들이 변수에 의존하지 않게 만들고 싶어서다. 충동이든 변덕이든, 변수 타입이나 구현을 마음대로 바꾸고 싶어서다. 그렇다면 왜 get 함수(getter)와 set 함수(setter)를 당연하게 공개(public)해 비공개 변수를 외부에 노출할까? 자료 추상화 다음 두 클래스는 2차원 점을 표현한다. 그런데 한 클래스는 구현을 외부로 노출하고 다른 클래스는 구현을 완전히 숨긴다. // 구체적인 Point 클래스 public class Point { public double x; public double y; } // 추상적인 Point 클래스 public interface Point { double getX(); double getY(); void setCartesi..

[객체지향의 사실과 오해] 5. 역할, 책임, 협력 - 개발 도서 정독하기

우리 모두를 합친 것보다 더 현명한 사람은 없다. - Ken Blanchard - Intro 인간은 어떤 본질적인 특성을 지니고 있느냐가 아닌 어떤 상황에 처해 있느냐가 인간의 행동을 결정한다. 각 개인이 처해 있는 정황 또는 문맥(Context)이 인간의 행동 방식을 결정한다는 것이다. 여기서 인간의 행동을 결정하는 문맥은 타인과의 협력이다. 행동의 적합성이 결정되면 협력이라는 문맥이 인간의 행동 방식을 결정하는 것이다. 객체의 세계에서도 협력이라는 문맥이 객체의 행동 방식을 결정한다. 객체지향 설계의 전체적인 품질을 결정하는 것은 개별 객체의 품질이 아니라 여러 객체들이 모여 이뤄내는 협력의 품질이다. 훌륭한 객체지향 설계자는 객체들 간의 요청과 응답 속에서 창발하는 협력에 초점을 맞춰 애플리케이션을..

[객체지향의 사실과 오해] 3. 타입과 추상화 - 개발 도서 정독하기

일단 컴퓨터를 조작하는 것이 추상화를 구축하고, 조자하고, 추론하는 것에 관한 모든 것이라는 것을 깨닫고 나면 (훌륭한) 컴퓨터 프로그램을 작성하기 위한 중요한 전제 조건은 추상화를 정확하게 다루는 능력이라는 것이 명확해진다. - Keith Devlin - Intro 주요 대도시 지하에는 지하철이 거미줄처럼 도시 곳곳을 연결하고 있다. 지하철을 이용하는 승객의 목적은 하나의 역에서 다른 역으로 이동하는 것이다. 어떤 역에서 출발해야 하는지와 어떤 역에서 환승해야 하는지, 어떤 역을 거쳐야만 가장 쉽고 빠르게 목적지에 도착할 수 있는지를 직관적이고 단순하게 보여주는 것이다. 1993년 해리 벡은 사실적인 지형과 축척은 무시하고 역 사이의 연결성에만 집중한 지하철 노선도를 창조했다. 이 지하철 노선도는 역의..

[Clean Code] 5. 형식 맞추기 - 클린 코드 정독하기

프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야한다. 코드 형식을 맞추기 위한 간단한 규칙을 정하고 그 규칙을 착실히 따라야 한다. 필요하다면 규칙을 자동으로 적용하는 도구를 활용한다. 형식을 맞추는 목적 코드 형식을 맞추는 것은 중요하다. 너무나도 중요하므로 융통성 없이 맹목적으로 따르면 안 된다. 코드 형식은 의사소통의 일환이다. 의사소통은 전문 개발자의 일차적인 의무다. 오늘 구현한 기능이 다음 버전에서 바뀔 확률은 아주 높다. 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다. 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 미친다. 원래 코드는 사라질지라도 개발자의 스타일과 규율은 사라지지 않는다. 적절한 행 길이를 유지하라 소스 ..

[객체지향의 사실과 오해] 2. 이상한 나라의 객체 - 개발 도서 정독하기

객체지향 패러다임은 지식을 추상화하고 추상화한 지식을 객체 안에 캡슐화함으로써 실세계 문제에 내재된 복잡성을 관리하려고 한다. 객체를 발견하고 창조하는 것은 지식과 행동을 구조화하는 문제다. Rebecca Wirfs-Brock 객체지향과 인지 능력 인간은 본능적으로 세상을 독립적이고 식별 가능한 객체의 집합으로 바라본다. 많은 사람들이 객체지향을 직관적이고 이해하기 쉬운 패러다임이라고 말하는 이유는 객체지향이 세상을 자율적이고 독립적인 객체들로 분해할 수 있는 인간의 기본적인 인지 능력에 기반을 두고 있기 때문이다. 인간이 직접적으로 지각할 수 있는 대부분의 객체는 물리적인 경계를 지닌 구체적인 사물이다. 그러나 인간의 인지 능력은 물리적인 한계를 넘어 개념적으로 경계 지을 수 있는 추상적인 사물까지도 ..

[객체지향의 사실과 오해] 1. 협력하는 객체들의 공동체 - 개발 도서 정독하기

시너지를 생각하라. 전체는 부분의 합보다 크다. Stephen R. Covey Intro 객체지향을 처음 접하는 대부분의 사람들은 “객체지향이란 실세계를 직접적이고 직관적으로 모델링할 수 있는 패러다임”이라는 설명과 마주하게 된다. 이 설명이 전달하고자 하는 핵심은 객체지향 프로그래밍이란 현실 속에 존재하는 사물을 최대한 유사하게 모방해 소프트웨어 내부로 옮겨오는 작업이기 때문에 객체지향 소프트웨어는 실세계의 투영이며, 객체란 현실 세계에 존재하는 사물에 대한 추상화라는 것이다. 실세계의 모방이라는 개념은 객체지향의 기반을 이루는 철학적인 개념을 설명하는 데는 적합하지만 유연하고 실용적인 관점에서 객체지향 분석, 설계를 설명하기에는 적합하지 않다. 실제 애플리케이션을 개발하면서 객체에 직접적으로 대응되는..

[객체지향의 사실과 오해] 0. 책 소개 - 개발 도서 정독하기

객체지향의 사실과 오해 객체지향에는 많은 사람들이 동의하는 공통적인 특징이 있다. 추상화, 캡슐화, 상속, 다형성은 객체지향을 다른 패러다임과 구분하는 중요한 특징이다. SOLID로 대표되는 몇 가지 원칙들을 사용하면 훌륭한 객체지향 코드를 작성할 수 있다는 사실에 반박하는 개발자들은 그다지 많지 않다. 디자인 패턴 역시 객체지향 프로그래머들이 유용하다고 생각하는 도구 중 하나다. 그래서 객체지향이란 무엇일까? 저자는 위 질문에 정답이란 존재하지 않는다고 한다. 중요한 것은 이 질문에 대한 자신만의 견해를 가지고 있느냐다. 대부분의 사람들은 객체지향이란 무엇인가에 대해 자신 있게 대답하지 못한다. 실제로 상속이 무엇인지는 대답할 수 있지만 일반화가 무엇인지에 대해서는 대답하지 못하는 개발자들이 많다. 객..

[Clean Code] 4. 주석 - 클린 코드 정독하기

나쁜 코드에 주석을 달지 마라. 새로 짜라. - 브라이언 W. 커니핸, P.J. 플라우거 Intro 사실상 주석은 필요하지 않다. 우리에게 프로그래밍 언어를 치밀하게 사용해 의도를 표현할 능력이 있다면, 주석은 필요하지 않다. 우리는 코드로 의도를 표현하지 못한 것을 만회하기 위해 주석을 사용한다. 주석을 달 때마다 자신에게 표현력이 없다는 사실을 푸념해야 마땅하다. 주석은 자주 거짓말을 한다. 주석은 오래될수록 코드에서 멀어진다. 오래될수록 완전히 그릇될 가능성도 커진다. 프로그래머들이 주석을 유지하고 보수하기란 현실적으로 불가능하기 때문이다. 코드는 변화하고 진화한다. 여기저기로 옮겨지기도 하고, 조각이 나뉘고 합쳐지기도 한다. 불행하게도 주석이 언제나 코드를 따라가지 못한다. 진실은 한 곳에만 존재..

[Clean Code] 3. 함수 - 클린 코드 정독하기

과거 포트란(Fortran)과 PL/1 시절에는 시스템을 프로그램, 하위 프로그램, 함수로 나눴다. 현재에는 함수만 살아남았으며, 어떤 프로그램이든 가장 기본적인 단위가 함수다. 함수를 잘 이용하면 읽기 쉽고 이해하기 쉬운 코드로 작성이 가능하다. 클린 코드에서는 처음 읽는 사람이 내부 프로그램을 직관적으로 파악할 수 있고, 의도를 분명히 표현하는 함수 작성하는 방법에 대해서 소개한다. 작게 만들어라! 함수를 만드는 가장 중요한 규칙은 작게 만드는 것이다. public static String renderPageWithSetupsAndTeardowns(PageData pageData, boolean isSuite) throws Exception { if (isTestPage(pageData)) inclu..

[Clean Code] 2. 의미 있는 이름 - 클린 코드 정독하기

의미 있는 이름 소프트웨어에서 이름은 어디에나 쓰인다. 변수, 함수, 인수, 클래스, 패키지 등에도 이름을 붙인다. 뿐만 아니라 소스 파일, 소스 파일이 담긴 디렉터리, jar, war 파일에도 이름을 붙인다. 따라서 이름을 잘 지어야 많은 것들이 편해진다. 클린 코드에서는 이름을 잘 짓기 위한 몇 가지 간단한 규칙을 소개한다. 의도를 분명히 하라 의도가 분명한 이름은 정말로 중요하다. 좋은 이름을 지으려면 시간이 걸리지만, 좋은 이름으로 인해 절약하는 시간이 훨씬 더 많다. 변수나 함수, 클래스의 이름에는 존재 이유, 수행 기능, 사용 방법 등에 대한 질문에 답해야 한다. 따로 주석이 필요하다면 의도를 분명히 표현하지 못했다는 것이다. 변수 나쁜 예 int d; // 경과 시간(단위: 날짜) bad c..

반응형