본문 바로가기

WEB64

[Clean Code] 10장. 클래스 10장. 클래스 클래스 체계 변수 목록이 가장 먼저 나온다 우선순위 정리 (static, public 상수) → ( private 변수 ) → ( 비공개 인스턴스 ) 공개함수 비공개 함수는 공개 함수 직후에 넣는다 추상화 단계가 순차적으로 내려간다. 그래서 프로그램은 신문 기사 처럼 읽힌다. 캡슐화 변수와 유틸리티 함수는 최대한 공개하지 않는게 좋다. 하지만 반드시 숨겨야 할 이유도 없다 만약 같은 패키지 안에서 TC가 함수를 호출하거나, 변수를 사용해야 한다면, protected로 선언하거나, 패키지 전체로 공개한다 캡슐화를 풀어주는 결정은 언제나 최후의 수단이다 클래스는 작아야 한다 클래스를 만들때 가장 중요한것은 크기 이다. 작은것이 가장 중요하다! 함수는 물리적인 행의 수 클래스는 맡은 책임 의 .. 2022. 2. 23.
[Clean Code] 9장. 단위테스트 단위테스트지만 TDD를 봤음. 9장. TDD TDD TDD법칙 3가지 실패하는 단위테스트를 작성할 때까지 실제 코드를 작성하지 않는다 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 깨끗한 테스트코드 유지하기 테스트 코드는 실제 코드 못지 않게 중요하다 깨끗한 단위 테스트 코드로 짜면 된다. 그렇다면 깨끗한 테스트 코드를 만들려면 어떻게 해야할까? 가독성이 제일 중요하다. 최소의 표현으로 많은 것을 나타내야 한다. 테스트 환경은 자원이 제한적일 가능성이 낮으므로, 깨끗한 코드가 더 좋다. @Test public void turnOnCoolerAndBlowerIfTooHot() throws Exception { to.. 2022. 2. 23.
[Clean Code] 8장. 경계 Clean Code 8장 (경계) 이곳에서의 경계는 클라이언트 코드와 외부 코드의 경계인것 같다. 외부 코드 사용하기 java.util.Map을 보면 굉장히 많은 인터페이스가 있다. clear(), equals() 등등.. 이것을 여기저기 넘긴다고 했을때, clear()는 어디서 불리더라도 맵에 있는 모든 값들이 삭제되는 문제가 생긴다. 경계 인터페이스인 Map을 seonsor 안으로 숨긴다. Seonsor 클래스에서 프로그램에 필요한 인터페이스만 제공한다. public class Sensors { private Map sensors = new HashMap(); public Sensor getById(String id) { return (Sensor) sensors.get(id); } } 항상 위와같이.. 2022. 2. 22.
[Clean Code] 7장. 오류처리 Clean Code 7장 (오류 처리) 깨끗한 코드와 오류처리는 연관이 있다. 흩어진 오류처리 코드는 프로그램을 파악하기 어렵게 한다. 오류 코드보다 예외처리를 사용하라 모든 예외마다 if(handle != DeviceHandle.INVALID)처럼 다 확인하지 말자. try catch를 이용하자. 오류를 발생하면 예외를 던지는게 낫다. (오류처리문과 섞이지 않겟) Try-Catch-Finally 문부터 작성하라 먼저 try catch를 만든다. 강제로 예외를 발생시키는 TC를 작성후에 테스트를 통과하게 코드를 작성하는 방식이 권장된다. 장점 먼저 try block의 트랜잭션 범위부터 구현하게 되므로, 범위 내에서 트랜잭션 본질을 유지하기 쉬워진다. 정상 흐름을 정의하라 짧게 말해서, 무조건 try,ca.. 2022. 2. 21.
[Clean Code] 6장. 객체와 자료구조 6장. 객체와 자료구조 Clean Code 6장 (객체와 자료구조) 변수를 비공개로 정의하는 이유는 뭘까? 남들이 변수에 의존하지 않게 만들기 위함이다. 충동이든 변덕이든, 변수타입이나 구현을 맘대로 바꾸고 싶어서다. 그러면 왜 getter,setter 함수를 public으로 만들어서 비공개 변수를 외부에 노출할까? 진정한 의미의 클래스는 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 한다. // 구체적인 Vehicle 클래스 public interface Vehicle { double getFuelTankCapacity(); double getGallonsOfGasoline(); } // 추상적인 Vehicle 클래스 (더 좋다) public interface Veh.. 2022. 2. 21.
[Clean Code] 5장. 형식 맞추기 Clean Code 5장 (형식 맞추기, 결국에는 가독성이 좋고 유지보수를 편리하게 하기 위함이다.) 같이 협업을 하기 위해서는 코드 형식을 정하고 그에 맞게 따라야 한다. How? 적절한 행 길이를 유지하자 ( 200line을 넘지 않고 대부분의 큰 프로그램들을 만들 수 있다. 우리가 익숙한 junit, tomcat도 그렇다.) 위에서 아래로 읽히듯이 (3장 참조. ) 내려가게 코딩을 하면 훨씬 가독성이 좋아진다. 코드간의 수직거리, 수평거리 세로 밀집도(수직거리) 세로 밀집도는 연관성을 의미한다. 즉 밀접한 관계에 있는 코드들은 세로 가까이 놓여야 한다는 뜻이다. 당연한 말이지만 의도적으로 기억해두어야 한다. private String m_className; // 아래 2줄은 연관이 있으므로 세로로 .. 2022. 2. 20.
[Clean Code] 4장. 주석 Clean Code 4장 (주석) 주석은 나쁜 코드를 보완하지 못한다 표현력이 풍부하고 깔끔하며 주석이 거의 없는 코드가, 복잡하고 어수선하며 주석이 많이 달린 코드보다 훨씬 좋다. 주석은 좋은 주석이 있고, 나쁜 주석이 있다. 좋은 주석 (책에 있는내용 전부 말고, 내 생각에 괜찮다고 생각한 주석들) 법적인 주석 // Copyright (C) 2003,2004,2005 ... Inc. All rights reserved 정보를 제공하는 주석 정규표현식에 대한 주석은 외계어를 알아보기 더 좋게 만들어준다.// kk:mm:ss EEE, MMM dd, yyyy 형식이다. Pattern timeMatcher = Patern.compile("\\d*:\\d*:\\d*\\w*, \\w* \\d*, \\d*"); .. 2022. 1. 23.
[Clean Code] 3장. 함수 Clean Code 3장 (함수) 작게 만들어라! 함수를 만드는 규칙은 작게 만드는것이다. 20줄도 길다. 이 책의 저자 켄트벡은 java swing의 함수들이 2~3줄 이었다고 한다. (이게 닌자코딩아닌가?) if/else, while문에 들어가는 블록은 한 줄이어야 한다. 함수를 잘 만드는 원칙 함수는 한가지를 해야한다. 그 한 가지를 잘 해야한다. 그 한가지만을 해야한다. 워렌버핏의 주식 투자원칙이 생각나는 말인데, 결론은 제발 한가지만 하자 인것으로... 함수 당 추상화 수준은 하나로! (이해 좀 더 필요) getHtml()은 추상화 수준이 높다. String pagePathName = PathParser.render(pagepath); 는 추상화 수준이 중간이다. .append('\n&#.. 2022. 1. 22.
[Clean Code] 3장. 함수 Clean Code 3장 (함수) 작게 만들어라! 함수를 만드는 규칙은 작게 만드는것이다. 20줄도 길다. 이 책의 저자 켄트벡은 java swing의 함수들이 2~3줄 이었다고 한다. (이게 닌자코딩아닌가?) if/else, while문에 들어가는 블록은 한 줄이어야 한다. 함수를 잘 만드는 원칙 함수는 한가지를 해야한다. 그 한 가지를 잘 해야한다. 그 한가지만을 해야한다. 워렌버핏의 주식 투자원칙이 생각나는 말인데, 결론은 제발 한가지만 하자 인것으로... 함수 당 추상화 수준은 하나로! (이해 좀 더 필요) getHtml()은 추상화 수준이 높다. String pagePathName = PathParser.render(pagepath); 는 추상화 수준이 중간이다. .append('\n&#.. 2022. 1. 22.
[Clean Code] 2장. (의미있는 이름, 요약 : 닌자코딩 금지) 의도를 분명히 밝혀라 변수, 함수, 클래스명을 보고 주석이 필요 없는 이름이 중요하다 (진짜다) int elapsedTimeInDays; int d; or int time; elaspedTimeInDays가 훨씬 직관적이다. x[0] == 1 대신 flag[SELECTED] == 1 이 좀 더 직관적이다. (매우 인정) 의도를 함축하지마라 (닌자코딩 금지, 1장에서도 언급됨) 결론 : 읽는 사람이 알도록 이름을 지어라. 발음하기 쉬운 이름을 사용하라 제니md흠스 변수좀 고쳐주세요! private Date genymdhms; // 이게 사람이 할짓인가? 실화를 바탕으로 재구성(generate date, year, month, day, hour, min, sec) private Date generationT.. 2022. 1. 1.
728x90