본문 바로가기

Back-End/Book7

[Clean Code] 6장. 객체와 자료구조 변수를 private로 설정하는 이유가 뭘까? 은닉하여 캡슐화하기 위해서 일것이다. 캡슐화를 한다면 변수 타입이나 구현을 맘대로 바꿀 수 있게 된다. 그렇다면 왜 수많은 프로그래머가 get, set 함수를 당연하게 public으로 설정해 private 변수를 외부로 노출시킬까? 자료 추상화 // (1) public class Point { public double x; public double y; } // (2) public interface Point { double getX(); double getY(); void setCartesian(double x, double y); double getR(); double getTheta(); void setPolar(double r, double theta.. 2022. 10. 3.
[Clean Code] 5장. 형식 맞추기 프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다. 팀으로 일한다면 팀이 합의해 규칙을 정하고 모두가 그 규칙을 따라야 한다. 개발자란 결국 함께 하는 직업이다. 만약 형식을 정해놓지 않고 각자 개발을 한다면?? 코드의 통일성이 있지 않아 해석하기 어렵고 각기 다른 형식으로 개발되다보니 유지보수도 어려울 것이다. 그렇기 때문에 형식은 매우 중요한 것 같다. 결국 코드도 의사소통이니 말이다. 그래서 프로젝트를 진행하기 전 코드 컨벤션을 미리 정하고 진행해보았는 데 코드해석도 한결 편해지고 커뮤니케이션 비용이 많이 줄게 되었다. 코드 컨벤션 대부분을 네이버 핵데이 컨벤션을 사용하게 되었는 데 해당 장의 내용의 거의 대부분이 녹아져 있는 것 같아서 신기했다. 좀 더 자세히 알아보자! 형식을 맞추는 목적 코.. 2022. 9. 25.
[Clean Code] 3~4장. 함수 & 주석 03장. 함수 프로그램의 가장 기본적인 단위가 함수다. 이 장은 의도를 분명히 표현하는 함수를 어떻게 구현할 지, 함수에 어떤 속성을 부여해야 처음 읽은 사람이 프로글매 내부를 직관적으로 파악할 수 있는 지 등 읽기 쉽고 이해하기 쉬운 함수를 만드는 법에 대해 소개한다. 작게 만들어라! 첫번째 규칙은 함수를 작게 만드는 것이다. 그렇다면 얼마나 작게 만들어야 할까? if/else 문, while문 등에 들어가는 블록은 한 줄이어야 한다. 그러면 바깥을 감싸는 함수가 작아질 뿐 아니라, 블록 안에서 호출하는 함수 이름을 적절히 짓는다면 코드를 이해하기도 쉬워진다. 즉, 중첩 구조가 생길만큼 함수가 커져서는 안된다. 그러므로 함수에서 들여쓰기 수준은 1단이나 2단을 넘어서면 안 된다. 한 가지만 해라! 함수.. 2022. 9. 17.
[Clean Code] 1~2장. 깨끗한 코드 & 의미 있는 이름 01장. 깨끗한 코드 코드가 존재하리라 코드는 요구사항을 표현하는 언어이다. 요구사항에 더욱 가까운 언어를 만들 수 있으며, 요구사항에서 정형 구조를 뽑아낼 수 있다. 코드의 도움 없이 요구사항을 상세하게 표현하기는 불가능하다. : 코드는 정밀한 표현이다. 고도로 추상화된 언어나 특정 응용 분야ㅐ 언어로 기술하는 명세도 마찬가지로 코드이다. 프로그래밍 언어에서 추상화 수준은 점차 높아질 것 이다. 나쁜 코드 우리 모두는 좋은 코드가 중요하다는 사실을 안다. 버그가 남아있고, 프로그램이 죽는 횟수가 늘어나는 나쁜 코드 출시에 바빠 코드를 마음대로 짜고, 기능을 추가할 수 록 엉망이 되는 나쁜 코드 나중에 손보겠다고 한 코드는 돌아간다는 사실에 안도감을 느끼며 위로하게 되면서 고치지 않게 된다. 고로, 시작.. 2022. 9. 15.
[객체지향의 사실과 오해] 07. 함께 모으기 & 부록 A. 집합과 분해 P.209 커피 예제를 보고 구현해보자 도메인 모델 구현 코드 손님 (Customer.java) public class Customer { private final Barista barista; private final Menu menu; public Customer(Barista barista, Menu menu) { this.barista = barista; this.menu = menu; } // 결과값 확인을 위해 반환 public Coffee order(String menuName) { MenuItem menuItem = menu.getMenuByName(menuName); return barista.makeCoffee(menuItem); } } 메뉴 (Menu.java) public class.. 2022. 6. 12.
[객체지향의 사실과 오해] 05. 책임과 메시지 훌륭한 객체지향의 세계는 명확하게 정의된 역할과 책임을 지닌 객체들이 상호 협력하는 세계이다. 자율적인 책임 자율적인 객체란 스스로의 의지와 판단에 따라 각자 맡은 책임을 수행하는 객체 객체가 자율적이기 위해서는 객체에게 할당되는 책임이 자율적이여야 한다. 책임은 자율성을 보장할 정도로 충분히 포괄적이고 추상적이여야 한다. (1) 모자장수.증언하라(); (2) 모자장수.목격했던 장면을 떠올리고 떠올른 기억을 시간 순서대로 재구성한 뒤 말로 표현하라(); (1)의 경우 모자 장수는 증언할 책임만을 가진다. 왕의 입장에서 모자 장수가 어떤 방법으로 증언하는지 중요하지 않기때문에 모자장수는 증언을 위한 구체적인 방법이나 절차에 대해서는 최대한의 자유를 누린다. 증언하라() { 기억.load(); // 수첩.l.. 2022. 6. 5.