분류 전체보기 (183) 썸네일형 리스트형 객체와 자료 구조 변수는 보통 private 형으로 정의한다. 캡슐화를 통해 외부에서 접근하지 못하게 한다. 의존성을 없애서 구현을 맘대로 변경하기 위해서다. 1. 자료 추상화 포인트 라는 자료구조를 나타내는 클래스가 있다. public class Point { public double x; public double y; } 이 클래스의 인스턴스 변수는 public 으로 선언되어 값에 직접 접근이 가능하다. 이는 클래스간의 의존성을 높이고 결합도를 높인다. 그래서 인스턴스 변수를 priavte으로 바꾸고 추상 인터페이스를 만들었다. public interface Point { double getX(); double getY(); void setCartesian(double x, double y); double getR().. 형식 맞추기 형식이 맞춰진 코드는 깔끔하고, 일관적이고, 꼼꼼하다고 느껴진다. 질서정연한 코드는 이해하기 좋고 편하게 읽을 수 있다. 오늘 작성한 코드는 내일 바뀔 확률이 매우 높다. 복잡하고 난잡한 코드를 짠다면 시간이 지날수록 거대해지고, 보기 힘들어 질 것이다. 하지만 코드스타일과 규율은 변하지 않는다. 형식을 맞추고 스타일을 맞추면 코드가 커져도 일정한 형태를 띄고, 편하게 읽을 수 있다. 1. 적절한 행 길이를 유지하라. fitensse는 테스트 자동화 도구로 총 라인이 5만줄인 큰 프로젝트이다. 하지만 이 프로젝트의 1/3의 파일당 평균 행 길이는 40 ~ 100줄이다. 가장 행이 많은 파일은 400줄이다. 아무리 큰 프로젝트라도 적은 줄로 구현이 가능하다. 1-1. 산문 기사처럼 작성하라. 좋은 기사는 .. 주석 주석은 거짓말을 한다. 프로그램이 변하고 진화함에 따라 프로그래머가 주석을 매번 유지. 보수하기는 불가능하다. 따라서 시간이 지날수록 주석은 거짓말을 하게 되고, 쓸모없어지고, 있으면 안되는 존재가 된다. 주석은 잘 작성된 코드로 대체할 수 있다. 코드로 모든 것을 표현하도록 연습해야 한다. 좋은 주석 1. 법적인 주석 법적인 정보, 예를 들어 저작권이나 소유권을 나타내는 정보는 글 머리에 주석으로 작성한다. 2. 정보를 제공하는 주석 기본적인 정보를 주석으로 제공하면 편리하다. 하지만 클래스를 이용하거나 함수, 변수명으로 정보를 제공하도록 노력해야 한다. 도저히 방법이 없다면 주석으로 정보를 제공한다. 3. 의도를 설명하는 주석 예를 들어, 에라토스테네스의 채 알고리즘을 구현할 때, 시간복잡도를 줄이기.. Clean한 함수 1. 작게 만들어라. 20줄도 길다. 하나의 함수는 5줄 이내면 충분하다. 2. 한 가지 일 만 하게하라. 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다. 하나의 함수 안에서 추상화 수준이 하나인 단계만 수행한다면, 그 함수는 하나의 일만 한다. >> 하나의 함수 안에서는 동일한 추상화 수준을 유지한다. 기존의 코드에서 의미있는 이름으로 새로운 함수를 추출할 수 있다면, 그 함수는 하나의 일만 하고 있는 것이 아니다. 3. 함수당 추상화 수준은 하나로. 추상화 수준이 높은 것 : 함수가 포함하는 기능, 그 함수의 뒤에서 일어나는 일이 많다는 것. ex) getHtml() 추상화 수준이 낮은 것 : 그 함수 하나로 작은 기능 하나가 실행되는 것 ex) .append.. 의미있는 이름 짓기 1. 의도를 분명히 밝혀라. 좋은 이름으로 절약하는 시간 > 좋은 이름을 위해 고민하는 시간 존재 이유, 수행기능, 사용방법들을 알기 위한 주석이 필요하다면 이름으로 의도를 충분히 드러내지 못한 것이다. 2. 그릇된 정보를 피하라. 나름대로 널리 쓰이는 의미가 있는 단어를 다른 의미로 사용하면 안됨. (ex. hp = 유닉스 운영체제의 종류. 직각삼각형의 빗변(hypotenuse)를 hp라고 표현하면 그릇된 정보를 전달할 가능성이 있다.) List 자료형을 사용하지 않는다면, accountList처럼 이름에 List를 사용하면 안된다. 단순히 accounts면 충분. (List 자료형도 List를 붙이는 것은 좋지 않다.) 유사한 개념은 일관성있는 유사한 표기법을 사용한다. 어디는 addNumber(),.. 클린 코드란 로버트 C 마틴의 클린코드 책 발췌 1. 우아한 코드 : 보기에 즐거운 코드 (가독성이 좋은 코드) 2. 효율적인 코드(속도, CPU, RAM) 3. 세세한 부분까지 철저한 오류처리가 된 코드 4. 한가지를 잘 하는 코드 5. 다른 사람이 고치기 쉬운 코드 6. 의미있는 이름이 있는 코드 7. 의존성이 최소인 코드 8. 모든 테스트(단위테스트, 인수테스트)를 통과 9. 중복이 없는 코드 - 추상 메서드 - 추상 클래스 10. 시스템 내 모든 설계 아이디어를 표현한다. - 의미있는 이름 같이 - 메서드 추출 리펙토링 - 기능을 기술하는 메소드 하나 + 기능을 수행하는 메서드 여러개 로 메서드를 나누는 리펙토링 11. 코드를 읽으면서 다음 내용이 짐작이 되고, 짐작한 내용이 읽히는 코드 보이스카우트 규칙 >.. 객체지향 생활체조 http://www.yes24.com/Product/Goods/3290339 소트웍스 앤솔러지라는 도서에는 나오는 객체지향적인 코드를 위한 현실적인 실현방법이 소개된다. 1. 한 메서드에 오직 한 단계의 들여쓰기만 한다. for, if, while 등등 한번 들어가면 한단계의 들여쓰기이다. for문 안에 if문이 들어가면 2단계의 들여쓰기가 된다. 2. else 키워드를 쓰지 마라. else를 이용한 분기처리는 가독성에 좋지 않다. else에서 어떤일을 하는지 코드에서 한눈에 보기 힘들기 때문이다. 또한 else문이 중첩되면, 아주 좋지않은 코드가 나온다. 대안: 1. early return으로 뒤의 코드를 보지 않고 결과를 바로 리턴하는 방법 2. 전략패턴(다형성)(아직 잘 모름) 3. 모든 원시값과 .. Enum 활용(람다식 사용하기) 3주차 미션이 끝나고 마지막 최종 코딩 테스트를 기다리고 있다. 3주차 미션은 너무 어려웠어서, 코드 리펙토링이 충분히 진행되지 못했다. 그래서 조금 더 코드를 줄이는 방법을 고민한 결과 Enum을 좀 더 고급스럽게 사용하면 코드를 더 줄일 수 있을 것 같았다. Enum은 서로 연관된 상수의 집합이다. 클래스로서 상수들을 정의할 수 있고, 생성자와 메서드를 가질 수 있다. 새로운 영감을 받은건 아래 글의 댓글이었다. okky.kr/article/641946 나는 enum 클래스를 이렇게 이용하고 있었다. Option은 사용자가 선택하는 번호, getMenu()는 사용자 입력 String을 Option과 비교해 같은 enum상수를 반환하여 컨트롤러에서 사용했다. public class LineMenuCon.. 이전 1 ··· 10 11 12 13 14 15 16 ··· 23 다음