객제지향, TDD, 클린코드/클린코드 6

객체와 자료 구조

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

경계 & 일급 컬렉션이란?

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(..

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

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