본문 바로가기

전체 글

(120)
7장. 오류처리(clean code) 오류 코드보다 예외를 사용하라 예외에 의미를 제공하라 오류 메시지에 정보를 담아 예외와 함께 던져라. - 로깅 기능에서 유용하다. 호출자를 고려해 예외 클래스를 정의하라 오류를 잡아내는 방법으로 분류해라. 감싸는 클래스를 이용하라. -> 감싸는 클래스? 클래스가 던지는 예외를 잡아 변환하는 역할만을 하는 클래스 정상 흐름을 정의하라 특수 사례 패턴을 이용해라 -> 클래스를 만들거나 객체를 조작하여 특수 사례 처리 null을 반환하지 마라 null을 반환할 경우 다른 코드에서 null 여부를 확인해야 하는데 나쁜 코드이다! null 대신 특수 사례 객체를 이용하여 의미가 있는 다른 갑을 반환해주면 된다. null을 전달하지 마라 null을 전달하게 되면 예외 처리를 해줘야 하니 되도록 전달하기를 피하라. ..
6장. 객체와 자료구조(clean code) 자료 추상화 클래스란 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 의미를 가진다. 자료를 세세하게 공개하기 보다는 추상적 개념을 표현하는 것이 좋다. 자료/객체 비대칭 객체와 자료구조는 상호보안적인 성격을 가진다. 디미터 법칙 모듈은 자신이 조작하는 객체의 속사정을 몰라야한다는 법칙 기차 충돌 final String outputDir= ctxt.getOptions().getScratchDir().getAbsolutePath(); 이런 방식의 코드는 피하는 편이 좋다. - 객체라면 내부구조를 숨겨야 하니 디미터 법칙을 위반한다. 자료구조라면 내부 구조를 노출하므로 디미터 법칙 위반이 아니다. 잡종 구조 절반은 객체, 절반은 자료구조인 설계는 단점만 모아둔 구조다. 자료..
5장. 형식 맞추기(clean code) 형식을 맞추는 목적 코드 형식은 의사소통이다. (협업할 때 주의) 적절한 행 길이를 유지하라 신문 기사처럼 작성하라. 이름은 간단하면서도 설명이 가능하게 해라. 소스파일이 첫 부분은 고차원 개념이나 알고리즘을 설명한다. 내려갈수록 의도를 묘사한다. 개념은 빈 행을 분리하라. ex) 패키지 선언부, import 문, 각 함수 사이에 빈 행이 들어가면 가독성이 높아진다. 세로 밀집도 서로 밀접한 코드 행은 세로로 가까이 놓여야 한다. 수직 거리 변수 선언 - 사용하는 위치에 최대한 가까이에 선언한다. 인스턴수 변수 - 클래스 맨 처음에 선언한다. 종속 함수 - 한 함수가 다른 함수를 호출한다면, 두 함수는 세로로 가까이 배치한다.(가능하다면 호출하는 함수가 먼저) 개념적 유사성 - 친화도가 높을 수록 코드는..
4장. 주석(clean code) 주석은 나쁜 코드를 보완하지 못한다 주석은 가능한 줄이자. 코드로 의도를 표현하라! if((employee.flags & HOURLY_FLAG) && (employee.age > 65)) if(employee.isEligibleForFullBenefits()) 전자보다는 후자가 낫다 좋은 주석 법적인 주석 정보를 제공하는 주석 ex) 추상 메서드가 반환할 값 설명 의도를 설명하는 주석 의미를 명료하게 밝히는 주석 ex) assertTrue(a.compareTo(a) == 0); // a == a 결과를 경고하는 주석 다른 프로그래머에게 결과를 경고할 목적 ex) // 여유 시간이 충분하지 않다면 실행하지 마십시오. TODO 주석 앞으로 할 일 ex) 더 이상 필요 없는 기능을 삭제하라는 알림, 누군가에게..
3장. 함수(clean code) 1. 작게 만들어라 함수는 짧을수록 좋고, 들여쓰기는 1단이나 2단을 넘어서지 않는게 좋다. if문 / else 문 / while문 등에 들어가는 블록은 한 줄로, 거기서 함수를 호출해라. 2. 한가지만 해라 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 분리하라. 함수 내의 문장의 추상화 수준은 동일한 것이 좋다. (함수로만 구성된 코드는 추상화 수준이 높고, 구체적은 세부 구현을 담은 코드는 추상화 수준이 낮다.) 코드가 위애서 아래로 이야기처럼 읽히면 추상화 수준을 일관되게 유지하는 것이 쉬워진다. (내려가기 규칙: 한 함수 다음에 추상화 수준이 한 단계 낮은 함수가 오도록 함) 3. switch문 switch문은 다형성 객체를 생성하는 경우에 유용하다. 4. 서술적인 이름을 사용하라..
2장. 의미 있는 이름(clean code) 소프트웨어에서 이름을 잘 지으면 여러모로 편하다. 1. 의도를 분명히 밝혀라 public List getThem(){ List list1 = new ArrayList(); for (int[] x: theList) if (x[0]==4) list1.add(x); } ➡️ 코드의 맥락이 코드 자체에 명시적으로 드러나지 않는다. ➡️ 각 개념에 이름을 붙이자 public List getFlaggedCells(){ List flaggedCells = new ArrayList(); for(int[] cell : gameBoard) if(cell[STATUS_VALUE] == FLAGGED) flaggedCells.add(cell); return flaggedCells; } 2. 그릇된 정보를 피하라 널리 쓰이는 ..
1장. 깨끗한 코드(clean code) 현재 관리하고 있는 ios, 안드로이드 어플리케이션 산타 ‎산타 - SANTA ‎#정복하기 ⁃ 산행의 출발과 정상도착까지 산타가 함께합니다. ⁃ 정상도착 후 사진인증을 통해 깃발을 획득할 수 있습니다. #랭킹제도 ⁃ 다른이들과의 선의의 경쟁을 통해 더욱 재밌게 즐겨 apps.apple.com 산타 - SANTA - Google Play 앱 산타와 함께하는 등산의 새로운 경험! 산타에 등록된 산을 정복하고 깃발을 획득하여 각 산의 1등이 되어보세요! play.google.com 업데이트 시기에 맞추어 개발하다보니 코드에 아쉬움이 있어 refactoring을 하기로 하였다. 본격적인 작업 시작 전 clean code 책으로 학습하고, 내가 작성한 코드에 적용할 계획이다. (마침, 스프링부트로 개발을 하였고,..
리눅스 사용시 root? 리눅스 사용 중 root라는 용어, 아주 많이 접해봤을 것이다. root란 쉽게 한마디로 말하면 최고 관리자 이다. 리눅스 계열 운영체제에서 root계정은 반드시 존재하고, 운영체제의 모든 것을 제어할 권한을 가지게 된다. 그럼 컴퓨터 주인이 사용하는 계정과 차이점은 뭘까? 리눅스 운영체제에서는 컴퓨터 주인 계정이 root 계정보다 낮은 권한을 가진다. 리눅스를 사용할 때 sudo 라는 명령어 대부분 사용해봤을 것이다. -sudo 명령어는 유닉스 및 유닉스 계열 운영 체제에서, 다른 사용자의 보안 권한, 보통 슈퍼유저로서 프로그램을 구동할 수 있도록 하는 프로그램이다. 프로그램 - 위키백과, 우리 모두의 백과사전 ko.wikipedia.org 여기서 일반 계정과 root 계정의 차이를 느낄 수 있다. 나..