전체 글203 [클린코드] 19일차 - 클래스는 작게 그리고 하나의 책임만 줘라 [클린코드] 19일차 - 클래스는 작게 그리고 하나의 책임만 줘라 클린코드 19일차 (p. 171~179(10장) ) 10장 클래스 1장 ~ 9장 : 코드 행과 코드 블록을 올바로 작성하는 방법 + 함수를 올바로 구현하는 방법 + 함수가 서로 관련을 맺는 방식 하지만, 더 높은 차원의 단계까지 신경 쓰지 않으면 앞선 방법은 말짱도루묵 깨끗한 코드를 얻기 힘들다. 이 장에서는 깨끗한 클래스를 다룬다. 1. 클래스 체계 클래스를 정의하는 표준 자바 관례에 따르면, - 가장 먼저 변수 목록이 나온다. 정적 static 공개 public 상수 (가 있다면 맨처음에 !) 정적 static 비공개 private 변수 비공개 인스턴스 변수 (공개 변수가 필요한 경우 거의 X) - 그 다음으로 함수 목록이 나온다. 공.. 2023. 11. 13. [클린코드] 17일차/18일차 - 적시에 빠르고, 독립적이며, 반복가능하여, 자가검증 하는 단위테스트 [클린코드] 17일차/18일차 - 적시에 빠르고, 독립적이며, 반복가능하여, 자가검증 하는 단위테스트 클린코드 17일차 (p. 151~152(8장) / 153~160(9장) ) 클린코드 18일차 (p. 161 ~ 169(9장) ) 9장 단위 테스트 꼬치꼬치 따지며 코드가 제대로 도는지 확인하는 테스트 코드를 작성하라. 1. TDD 법칙 세 가지 - TDD는 실제 코드를 짜기 전에 단위 테스트부터 짜라고 요구한다. - TDD 법칙 세가지 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. - 이 방식이면 매일 수십 개의 테스트 케이스가 만들어진다. - .. 2023. 11. 13. [클린코드] 16일차 - 소프트웨어 경계를 깔끔하게 처리하는 기법 [클린코드] 16일차 - 소프트웨어 경계를 깔끔하게 처리하는 기법 클린코드 16일차 (p. 142~150(8장) ) 클린코드 17일차 (p. 151~152(8장) / 153~160(9장) ) 8 경계 - 시스템에 들어가는 모든 소프트웨어를 직접 개발하는 경우는 드물다. - 이 장에서는 소프트웨어 경계를 깔끔하게 처리하는 기법과 기교를 살펴본다! 1. 외부 코드 사용하기 - 인터페이스 제공자: 적용성을 최대한 넓히려 애씀. - 인터페이스 사용자: 자신의 요구에 집중하는 인터페이스를 바람. - java.util.Map을 살펴보면, Map은 굉장히 다양한 인터페이스를 제공한다. - clear()는 Map을 사용하는 누구든 Map 내용을 지울 권한이 있다는 것을 의미한다. Map sensors = new Has.. 2023. 11. 12. [클린코드] 15일차 - 오류 처리 (부제: 프로그램 논리와 분리해 독자적인 사안으로 고려) [클린코드] 15일차 - 오류 처리 (부제: 프로그램 논리와 분리해 독자적인 사안으로 고려) 클린코드 14일차 (p. 123~128(6장) /129~131(7장) ) 클린코드 15일차 (p. 132~141(7장) ) 7 오류 처리 오류 처리는 프로그램에 반드시 필요한 요소 중 하나. 뭔가 잘못되면 바로 잡을 책임은 프로그래머에게 있다. 깨끗한 코드와 오류 처리는 확실히 연관성이 있다. 하지만 오류 처리 코드로 인해 프로그램 논리를 이해하기 어렵다면 깨끗한 코드가 아니다. 1. 오류 코드보다 예외를 사용하라 - 오류가 발생하면 예외를 던지는 편이 낫다. - 그러면 호출자 코드가 더 깔끔해진다. 2. Try-Catch-Finally 문부터 작성하라 - try-catch-finally 문에서 try블록에 들어.. 2023. 11. 10. [클린코드] 14일차 - 객체(자료숨김), 자료구조(자료공개) [클린코드] 14일차 - 객체(자료숨김), 자료구조(자료공개) 클린코드 14일차 (p. 123~128(6장) / 129~131(7장) ) 6 객체와 자료 구조 (복습) 1. 자료의 추상화 - 구현을 감추려면 추상화가 필요하다. 2. 자료/객체 비대칭 - 객체는 추상화 뒤로 자료를 숨기고, 자료를 다루는 함수만 공개한다. - 자료 구조는 자료를 그대로 공개하고, 별다른 함수는 제공하지 않는다. - 새로운 자료 타입 필요: 클래스와 객체 지향 기법이 가장 적합 - 새로운 함수 필요: 절차적인 코드와 자료 구조가 좀 더 적합 3. 디미터 법칙 - 디미터 법칙은 잘 알려진 *휴리스틱(heuristics)으로, "모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법"이다. - 휴리스틱의 의미를 다시 되짚어보면.. 2023. 11. 8. [클린코드] 13일차 - 구현을 감추려면 추상화. 그리고 객체와 자료 구조 사이의 분명한 차이 [클린코드] 13일차 - 구현을 감추려면 추상화. 그리고 객체와 자료 구조 사이의 분명한 차이 클린코드 13일차 (p.111~116(5장) / 117~122(6장) ) 6 객체와 자료 구조 변수를 비공개 private 로 정의하는 이유가 있다. 다른 사람들이 변수에 의존하지 않게 만들고 싶어서이다. (충동 .. 변뎍.. 그냥 구현을 맘대로 바꾸고 싶어서 ..?) 그렇다면 어째서 많은 프로그래머가 조회get 함수와 설정set 함수를 당연하게 공개public 해 비공개 변수를 외부에 노출할까? .. 정확히 무슨 뜻인진 모르겠지만 차차 알아가보자. 자료 추상화 - 두 클래스 모두 2차원 점을 표현. - 1 클래스는 구현을 외부로 노출. / 2 클래스는 구현을 완전히 숨김. // 1. 구체적인 Point 클래스.. 2023. 11. 7. [클린코드] 11~13일차의 1/2 - 원활한 소통을 장려하는 코드 형식 [클린코드] 11일차/12일차/13일차의 1/2 - 원활한 소통을 장려하는 코드 형식 클린코드 11일차 (p. 95~102(5장) ) 클린코드 12일차 (p. 103~110(5장) ) 클린코드 14일차 (p.111~116(5장) / 117~122(6장) ) 5 형식 맞추기 형식을 맞추는 목적 - 코드 형식은 너무나도 중요하므로 융통성 없이 맹목적으로 따르면 안 된다. - 즉, 코드 형식 == 의사소통의 일환 - '돌아가는 코드'가 중요한게 아니다. 시간이 지날 수록 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 미친다. - 원래 코드는 사라질지라도 개발자의 스타일과 규율은 사라지지 않는다. 그렇다면 원활한 소통을 장려하는 코드 형식은 무엇일까 ? 적절한 행 길이를 .. 2023. 11. 4. [클린코드] 9일차/10일차 - 나쁜 주석이 될 수 밖에 없는 주석 조건 [클린코드] 9일차/10일차 - 나쁜 주석이 될 수 밖에 없는 주석 조건 클린코드 9일차 (p. 74~83(4장) ) 클린코드 10일차 (p. 84~94(4장) ) 4 주석 4. 나쁜 주석 1) 주절거리는 주석 - 특별한 이유 없이 의무감으로 한다면 시간 낭비이다. - 주석을 달기로 결정했다면 충분한 시간을 들여 최고의 주석으로 달도록 노력하라. 2) 같은 이야기를 중복하는 주석 - 같은 코드 내용을 그대로 중복하는 주석은 피하라. - 자칫 코드보다 주석 읽는 시간이 길어진다. 3) 오해할 여지가 있는 주석 ..Nope! 4) 의무적으로 다는 주석 ..Nope!! 5) 이력을 기록하는 주석 .. Nope!! 6) 있으나 마나 한 주석 - 너무 당연한 사실을 언급하는 주석으로 새로운 정보를 제공하지 못하는.. 2023. 11. 1. [클린코드] 8일차 - 나쁜 코드에 주석을 달지 마라. 새로 짜라. 하지만 좋은 주석은 분명히 있다. [클린코드] 8일차 - 나쁜 코드에 주석을 달지 마라. 새로 짜라. 하지만 좋은 주석은 분명히 있다. 클린코드 8일차 (p. 67~74(4장) ) 4 주석 나쁜 코드에 주석을 달지마라. 새로 짜라. - 주석은 쉰들러 리스트가 아니다. ‘순수하게 선하지‘ 못하다. - 주석은 항상도 아니고 고의도 아니지만 너무 자주 거짓말을 한다. - 왜냐? 현실적으로 주석을 유지보수하기 쉽지 않기 때문이다. 1. 주석은 나쁜 코드를 보완하지 못한다. - 깔끔하고 주석이 거의 없는 코드가, 복잡하며 주석이 많이 달린 코드보다 훨씬 좋다. 2. 코드로 의도를 표현하라! - 확실히 코드만으로 의도를 설명하기 어려운 경우가 존재하지만, 많은 개발자들이 코드는 훌륭한 수단이 아니라는 의미로 해석한다. 3. 좋은 주석 1) 법적인 .. 2023. 11. 1. [클린코드] 7일차 - 오류 보단 예외처리, 그리고 클린코드로 인한 중복 알레르기 [클린코드] 7일차 - 오류 보단 예외처리, 그리고 클린코드로 인한 중복 알레르기 클린코드 7일차 (p. 57~66(3장) ) 들어가기 전..) 벌써 클린코드 고생길이 보이는 중 .. 다시 열심히 해야지. 작심삼일도 안 끊기면 된다. 3 함수 9. 오류 코드보다 예외를 사용하라! - 명령 함수에서 오류 코드를 반환하는 방식은 명령/조회 규칙을 미묘하게 위반한다. - 오류 코드 대신 예외를 사용하면 오류 처리 코드가 원래 코드에서 분리되므로 코드가 깔끔해진다. 1) try/catch 블록 뽑아내기 - try/catch 블록을 함수로 뽑아내는 편이 좋다. // 모든 오류 처리 public void delete(Page page){ try { deletePageAndAllReference(page); } ca.. 2023. 10. 31. [클린코드] 6일차 - 좋은 함수를 위한 n가지 주의사항 [클린코드] 6일차 - 좋은 함수를 위한 n가지 주의사항 클린코드 6일차 (p. 46~56(3장) ) 3 함수 3. 함수 당 추상화 수준은 하나로! - 함수가 확실히 '한 가지' 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해야한다. - 한 함수 내에 추상화 수준을 섞으면 코드 읽는 사람이 헷갈린다. 위에서 아래로 코드 읽기: 내려가기 규칙 4. Switch 문 - switch 문은 작게 만들기 어렵다. - 본질적으로 switch문은 N가지를 처리한다. - 하지만 각 switch 문을 저차원 클래스에 숨기고 절대로 반복하지 않는 방법이 있는데, '다형성'을 이용하는 것이다. public Money calculatePay(Employee e) throws InvalidEmployeeType { s.. 2023. 10. 30. [클린코드] 5일차 - 분명한 이름을 위한 의미있는 맥락(Context) 부여, 함수는 한 가지 일만. [클린코드] 5일차 - 분명한 이름을 위한 의미있는 맥락(Context) 부여, 함수는 한 가지 일만. 클린코드 5일차 (p. 35~38(2장) / 39~45(3장) ) 2 의미 있는 이름 15. 의미있는 맥락을 추가하라 - 클래스, 함수, 이름 공간 등으로 감싸서 맥락을 부여. // 맥락이 불문명한 변수 // 함수 이름은 맥락의 일부만 제공하며, 알고리즘이 나머지 맥락을 제공. private void printGuessStatistics(char candidate, int count){ String number; String verb; String pluralModifier; if (count == 0){ number = "no"; verb = "are"; pluralModifier = "s"; } e.. 2023. 10. 29. 이전 1 2 3 4 5 6 ··· 17 다음