목록분류 전체보기 (90)
오르막길
7장오류처리 책에서 기억하고 싶은 내용오류 코드보다는 예외를 사용하자 - 호출자 코드가 더 깔끔해지고 오류처리코드와 뒤섞이지 않는다.Try-Catch-Finally 문부터 작성하자 - 프로그램 상태를 일관성있게 유지할 수 있는 방법미확인 예외를 사용하자 확인된 예외는 OCP를 위반한다메서드 모두가 선언부에 해당 예외에 대해 정의해야하고 하위를 바꾸면 상위를 다 고쳐야하고 ...최하위 함수에서 새로운 오류가 추가되면 연쇄적인 수정이 필요하게 된다예외에 의미를 제공하자호출자를 고려해 예외 클래스를 정의하자오류를 정의한다는 것은 오류를 잡아내는 방법이라는 것감싸기 기법정상 흐름을 정의하자 - 특수 사례 패턴(클래스를 만들거나 객체를 조작해 특수 사례를 캡슐화해서 처리)null을 반환하거나 전달하지 말자깨끗한..
6장객체와 자료구조 책에서 기억하고 싶은 내용자료 추상화추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 클래스다자료를 세세하게 공개하기 보다는 추상적인 개념으로 표현하는 것이 좋다.자료/객체 비대칭객체지향코드에서 어려운 변경은 절차적코드에서 쉬우며, 절차적코드에서 어려운 변경은 객체지향코드에서 쉽다디미터 법칙모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다.잡종 구조절반은 객체, 절반은 자료 구조인 잡종 구조 탄생자료 전달 객체공개 변수만 있고 함수만 없는 클래스 => 자료 구조체의 전형적 형태객체는 동작을 공개하고 자료를 숨긴다.오늘 읽은 소감여지껏 읽은 내용중에 제일 어려워서 여러번 읽었다. 사실 추상화라는게 개념적으로만 이해하고 제대로 적용해볼 기회가 없었..
4장주석 책에서 기억하고 싶은 내용주석은 나쁜 코드를 보완하지 못한다표현력이 풍부하고 깔끔하며 주석이 거의 없는 코드가 훨씬 좋다.많은 경우 주석에 달려는 설명을 함수로 표현해도 충분하다.좋은 주석계약 조건, 법적 정보, 표준 라이선스, 외부 문서 등의 표기기본적인 정보 제공 - 하지만 함수 표기가 더 낫다의도 설명의미 명료 - 인수나 반환값 자체를 명료하게 하는 것이 더 낫지만 못할 때결과 경고 - 더 나은 해결책이 있을 수 있겠지만, 주석이 합리적일 때도 있다.앞으로 할일 - 핑계가 되어서는 안된다.중요성 강조나쁜 주석이해가 안되는 주석같은 이야기를 중복하는 주석 - 코드가 더 깔끔하다오해할만한 주석의무적인 주석이력 기록용 주석, 공로나 저자 표시, 주석처리한 옛날 코드 - 소스 코드 관리 시스템을 ..
3장함수 책에서 기억하고 싶은 내용의도를 분명히 표현하는 함수를 어떻게 구현할 수 있을까?함수 크기는 작게, 더작게함수는 한가지만 잘해야 한다 (다른 의미있는 이름으로 추출할 수 있다면 여러개)내려가기 규칙 - 위에서 아래로 읽히는서술적인 이름 - 길어도 좋으니 일관성있게부수적인 효과를 일으키지 않도록명령과 조회를 분리오류코드보다는 예외를 사용하기 (그렇지만 try-catch 보다는 해당 블록을 함수로 뽑도록)오류처리도 한가지씩 => try로 시작했다면 catch/finally로 끝내도록중복을 없앤다함수를 어떻게 짜지?서투른 코드를 짠다다듬고, 함수를 만들고, 이름을 바꾸고, 중복을 제거한다.메서드를 줄이고 순서를 바꾸고 클래스를 쪼갠다.단위테스트를 항상 통과한다.진짜 목표는 시스템이라는 이야기를 풀어가..
2장의미있는 이름 책에서 기억하고 싶은 내용의도/의미/차이가 분명한, 구분/발음/검색하기 쉬운, 솔직한 이름클래스 이름 : 명사, 명사구메서드 이름 : 동사, 동사구 (접근자: get, 변경자: set, 조건자: is)오늘 읽은 소감처음 했던 유니티 클론코딩 때 controller, manager, driver를 섞어서 썼어서 좋은 습관인 줄 알았는데이 책을 읽어보니 동일 코드 기반에서는 피하라고 하니 앞으로 주의하는 게 좋을 것 같다는 생각이 처음 들었다.어디까지가 매니저고 컨트롤러인지 나도 곰곰히 생각해보니 구분하기 어려운 것 같다.궁금하거나 더 공부해야할 내용헝가리안 표기법: 변수 이름에 그 변수의 타입을 포함시키는 관습intCount (여기서 int는 정수형이라는 것을 나타냄)strName (여기..
추천사 ~ 1장깨끗한 코드 책에서 기억하고 싶은 내용추천사소프트웨어 설계에서 재작업은 가치를 가져온다.설계는 과정이지 고착된 종착점은 아니다0장 들어가면서사례 연구에서 코드를 정리하면서 내린 각 결정과 휴리스틱 사이의 관계를 이해함으로써원칙, 패턴, 실기, 휴리스틱을 자신의 지식으로 만들 수 있도록 깊게 읽어보자1장코드는 요구사항을 명시하는 언어이다.르블랑의 법칙 - 나중은 결코 오지 않는다.기한을 맞추는 유일한 방법은 코드를 최대한 깨끗하게 유지하는 습관이다.문학적 프로그래밍 - 인간이 읽기 좋은 코드중복을 피하라. 한 기능만 수행하라. 제대로 표현하라. 작게 추상화하라.깨끗한 이름/함수/클래스 만드는 법을 소개한다.이 책을 읽는다고 뛰어난 프로그래머가 된다는 보장은 없다.단지 뛰어난 프로그래머가 사용..
문제찬솔이는 블로그를 시작한 지 벌써 𝑁$N$일이 지났다.요즘 바빠서 관리를 못 했다가 방문 기록을 봤더니 벌써 누적 방문 수가 6만을 넘었다. 찬솔이는 𝑋$X$일 동안 가장 많이 들어온 방문자 수와 그 기간들을 알고 싶다.찬솔이를 대신해서 𝑋$X$일 동안 가장 많이 들어온 방문자 수와 기간이 몇 개 있는지 구해주자.입력첫째 줄에 블로그를 시작하고 지난 일수 𝑁$N$와 𝑋$X$가 공백으로 구분되어 주어진다.둘째 줄에는 블로그 시작 1$1$일차부터 𝑁$N$일차까지 하루 방문자 수가 공백으로 구분되어 주어진다.출력첫째 줄에 𝑋$X$일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다.만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개..

문제어떤 나라에 N개의 도시가 있다. 이 도시들은 일직선 도로 위에 있다. 편의상 일직선을 수평 방향으로 두자. 제일 왼쪽의 도시에서 제일 오른쪽의 도시로 자동차를 이용하여 이동하려고 한다. 인접한 두 도시 사이의 도로들은 서로 길이가 다를 수 있다. 도로 길이의 단위는 km를 사용한다.처음 출발할 때 자동차에는 기름이 없어서 주유소에서 기름을 넣고 출발하여야 한다. 기름통의 크기는 무제한이어서 얼마든지 많은 기름을 넣을 수 있다. 도로를 이용하여 이동할 때 1km마다 1리터의 기름을 사용한다. 각 도시에는 단 하나의 주유소가 있으며, 도시 마다 주유소의 리터당 가격은 다를 수 있다. 가격의 단위는 원을 사용한다.예를 들어, 이 나라에 다음 그림처럼 4개의 도시가 있다고 하자. 원 안에 있는 숫자는 그 ..
문제케빈 베이컨의 6단계 법칙에 의하면 지구에 있는 모든 사람들은 최대 6단계 이내에서 서로 아는 사람으로 연결될 수 있다. 케빈 베이컨 게임은 임의의 두 사람이 최소 몇 단계 만에 이어질 수 있는지 계산하는 게임이다.예를 들면, 전혀 상관없을 것 같은 인하대학교의 이강호와 서강대학교의 민세희는 몇 단계만에 이어질 수 있을까?천민호는 이강호와 같은 학교에 다니는 사이이다. 천민호와 최백준은 Baekjoon Online Judge를 통해 알게 되었다. 최백준과 김선영은 같이 Startlink를 창업했다. 김선영과 김도현은 같은 학교 동아리 소속이다. 김도현과 민세희는 같은 학교에 다니는 사이로 서로 알고 있다. 즉, 이강호-천민호-최백준-김선영-김도현-민세희 와 같이 5단계만 거치면 된다.케빈 베이컨은 미..