객제지향, TDD, 클린코드 9

객체, 설계 (중요한 건, 꺾였는데도 그냥 하는 마음)

(지금 내 심정.. 지푸라기라도 잡고싶다. 잡을 지푸라기라도 남아있지 않다는 게 문제지만) 중요한 건, 꺾이지 않는 마음? ㄴㄴ 꺾였는데도 그냥 하는 마음이다. 안녕하세요. 오늘은 객체의 설계에 대해 학습할 겁니다. 먼저 들어가기 전, 기억에 남는 구절이 있네요. 이론보다 실무가 먼저다. 어떤 분야를 막론하고, 이론을 정립할 수 없는 초기에는 실무가 먼저 급속한 발전을 이룬다. 프로그래밍을 통해 개념과 이론을 배우는 것이 개념과 이론을 통해 프로그래밍을 배우는 것보다 더 훌륭한 학습 방법이라고 생각한다. 개발자는 구체적인 코드를 만지며 손을 더럽힐 때 가장 많은 것을 얻어가는 존재다. ✔️ 변경에 취약한 코드 💡 객체 사이의 의존성(dependency)과 관련된 문제다. 의존성은 변경에 대한 영향을 암시..

객체와 자료 구조

안녕하세요. 오늘은 Clean Code의 '객체와 자료 구조'에 대해 학습할 겁니다. 객체를 추상화하고... 이러한 과정들이 어렵게 느껴집니다. (객체지향은 파면 팔 수록 신세계지만, 참 어렵네요) ✔️ 들어가기 전 자료 / 객체 객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다. 자료 구조는 자료를 그대로 공개하며 별다른 함수를 제공하지 않는다. ✔️ 자료 추상화 💡 변수를 private으로 하는 이유가 있다. → 변수에 의존하지 않게 만들고 싶고, → 변수 타입이나 구현을 맘대로 바꾸고 싶기 때문이다. ❓ 근데 왜, get(조회) 함수와 set(설정)함수를 당연하게 public해서 private 변수를 외부에 노출하는 것일까? 다음 두 클래스의 차이를 비교해보자. 두 클래스 모두 2차..

'TDD'와 '리팩토링'에 대하여

NextStep '단위테스트'와 'TDD'에 대하여 - 숫자 야구 게임에 이어, ['TDD'와 '리팩토링'에 대하여 - 자동차 경주]를 하며 학습한 내용이다. 📌 목표 매일 미션 진행하기 한 번에 모두 구현하기보다, 매일 일정한 시간을 투자한다. 가진 것을 비우기 구체적인 요구사항을 회피하지 않고, 적용하기 전과 후의 코드를 분석한다. 내가 가진 것을 비울 때, 가장 많은 것을 배울 수 있다. 정답을 찾기 위해 집착하지 않는다. 미션을 진행하는데 정답은 없다. 정답을 찾으려는 노력이 오히려 학습을 방해한다. 즉, 현재 상황에서 최선의 답을 끊임없이 찾으려고 노력한다. ✔️ 학습 목표 - 자동차 경주 TDD 기반으로 프로그래밍하는 경험 메소드 분리 + 클래스를 분리하는 리팩토링 경험 점진적으로 리팩토링하는..

경계 & 일급 컬렉션이란?

NextStep을 학습하다... '경계'와 '일급 콜렉션'이란 것을 알게 되었다. 한 포스팅에 담기엔 내용이 좀 길어져서 따로 포스팅을 하는 것이다. (일급 컬렉션에 대해서는 맨 아래 출처 링크가서 보시는 게 더 나을 겁니다. 특히 이동욱 개발자님 블로그 추천합니다. 저는 지식 전달보다는 학습에 초점을 맞출 것이라 많이 축약해서 올릴 예정입니다.) 먼저 '경계'를 알아보자. ✔️ 경계 1. 외부 코드 사용하기 API를 사용하는 사용자는 자신의 요구에 집중하는 인터페이스만 존재하기를 기대한다. java.util.List, java.util.Map과 같은 collection을 외부에 노출하는 경우, 사용자는 너무 많은 인터페이스에 노출하게 된다. Map sensors = new HashMap(); ... S..

클래스는 작아야 한다!

안녕하세요. 오늘은 클래스와 클린코드를 엮어서 학습해 볼 것입니다. 즉, 깨끗한 클래스를 다룰 겁니다. 개인적으로 클래스 분리는 객체지향의 꽃이라고 생각합니다. ✔️ 클래스는 작아야 한다! 클래스를 만들 때 첫 번째 규칙은 크기다. 클래스는 작아야 한다. 두 번째 규칙도 크기다. 더 작아야 한다. ❓ 그럼 도대체 얼마나 작아야 할까? 함수는 물리적인 행 수로 크기를 측정했다. 💡 클래스는 맡은 책임을 센다! 다음 코드는 SuperDashboard라는 클래스로, 공개 메서드 수가 대략 70개 정도다. 너무 많은 책임을 가진다. public class SuperDashboard extends JFrame implements MetaDataUser { public String getCustomizerLangu..

깨끗한 테스트 코드 유지하기

오늘은 단위 테스트에 대해 학습을 해볼 것이다. 테스트코드를 짜는 것도 기능 구현과 같이 또 하나의 코드를 작성하는 것이므로 어렵지만, 테스트코드의 단위를 설정하는 것도 초보 개발자인 나에겐 어렵다. 테스트 코드는 실제 코드의 유연성, 유지보수성, 재사용성을 보존하고 강화한다. 그러므로 테스트 코드는 깨끗하게 관리하자. ✔️ TDD 법칙 세 가지 첫째 법칙: 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 둘째 법칙: 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 셋째 법칙: 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 예를 들어, 숫자 1 ~ 9까지 검증하는 메서드를 짠다고 가정해보자. 먼저 테스트 코드를 짠다. @Test void 숫..

함수는 한 가지만 해라

오늘은 '함수는 한 가지만 해라'에 대해서 학습할 것이다. 저번에 클린코드 연습하는데, 아무리 해도 메서드 작게 쪼개기가 안 되는 것이었다...! 또 한 번 학습의 중요성을 느끼고... 💡 어떤 프로그램이든 가장 기본적인 단위가 함수다. ✔️ 작게 만들어라 함수를 만드는 첫째 규칙은 '작게'다. 함수를 만드는 둘째 규칙은 '더 작게'다. 그럼 함수가 얼마나 짧아야 할까? 일반적으로 다음 예시 코드정도가 마땅하다. public static String renderPageWithSetupsAndTeardowns (PageData pageData, boolean isSuite) throws Exception { if (isTestPage(pageData)) includeSetupAndTeardownPages(..

'단위테스트'와 'TDD'에 대하여

객제지향, TDD, 클린코드에 대한 학습을 하기 위해 'NEXTSTEP 플레이그라운드' 과정을 진행하고 있다. 총 4번의 단계별 미션이 있다. 4~5개월 전에 우테코 프리코스를 약 4주간 참여한 경험이 있다. 이번 '자바 플레이그라운드' 코스도 우테코 프리코스와 비슷한 것 같다. 단계에 따라 구체적인 요구사항이 추가되는 형식. 우테코 프리코스 때는 단순 회고만 올렸다. 하지만 이번엔 회고뿐만 아니라, 나의 코드를 분석해보는 과정까지 블로그에 담아보려 한다. 'NEXTSTEP 플레이그라운드' 과정은 총 4회의 단계별 미션이 있다. 1회차는 [숫자 야구 게임]이다. 그것을 학습하며 깨달은 것들을 기록해 볼 예정이다. 📌 목표 매일 미션 진행하기 한 번에 모두 구현하기 보다, 매일 일정한 시간을 투자한다. 가..

오류 코드보다 예외를 사용하라

출처: Clean Code 클린 코드 애자일 소프트웨어 장인 정신 / 로버트 C. 마틴 저 (얘 나랑 좀 닮음;;; 내 친구도 인정함) 클린코드에 대해 인상깊은 문장을 봐서 공부해봤다. 예외처리 서두에 '깨끗하고 튼튼한 코드에 한걸음 더 다가가는 단계로 우아하고 고상하게 오류를 처리하는 기법...(후략)' 문구가 인상깊다. 📌 요약 오류 처리도 한 가지 작업이다. 함수는 '한 가지' 작업만 해야 한다. 오류 처리도 '한 가지' 작업에 속한다. 그러므로 오류를 처리하는 함수는 오류만 처리해야 마땅하다. try/catch 블록은 원래가 추하다. 코드 구조에 혼란을 일으키며, 정상적인 동작과 오류 처리 동작을 뒤섞는다. try/catch 블록을 별도 함수로 뽑아내는 편이 낫다. public void delet..