객체지향10 private 메소드는 어떻게 테스트 할까(feat 객체 분리) 상위 public 메소드로 하위 private 메소드를 테스트 할 때 문제점extractNumbers메소드에서 호출되는 메소드들은 다 private 메소드들입니다. 각 기능들을 테스트 하기 위해 extractNumbers메소드를 호출하여 결과중심의 테스트로 private 메소드들을 테스트하였습니다. 문제점은 테스트에 실패했을 때 어느 메소드에서 실패했는지 모르는 것입니다. 유지보수를 위해 잘게 메소드로 나누었지만, 어느 메소드가 잘못됐는지 알지 못하는 모순되는 상황에 봉착 했습니다.```java// private 메소드 양만 봐도 어지럽습니다..public class StringParser { private static final String BLANK = ""; private static f.. 2024. 12. 13. 🤔 private 메소드는 어떻게 테스트 할까(feat 객체 분리) 상위 public 메소드로 하위 private 메소드를 테스트 할 때 문제점extractNumbers메소드에서 호출되는 메소드들은 다 private 메소드들입니다. 각 기능들을 테스트 하기 위해 extractNumbers메소드를 호출하여 결과중심의 테스트로 private 메소드들을 테스트하였습니다. 문제점은 테스트에 실패했을 때 어느 메소드에서 실패했는지 모르는 것입니다. 유지보수를 위해 잘게 메소드로 나누었지만, 어느 메소드가 잘못됐는지 알지 못하는 모순되는 상황에 봉착 했습니다.```java// private 메소드 양만 봐도 어지럽습니다..public class StringParser { private static final String BLANK = ""; private static f.. 2024. 11. 12. 🚫 else 금지 이유와 개선 법 🚫 else를 사용할 때의 단점1. 두 가지 이상의 책임// ❌ else를 사용하면 하나의 메서드가 성공/실패 두 가지 책임을 가짐public void processPayment(Payment payment) { if (payment.isValid()) { // 결제 성공 처리 payment.approve(); notifySuccess(); savePaymentHistory(); } else { // 결제 실패 처리 payment.reject(); notifyFailure(); saveFailureHistory(); }}// ✅ 실패는 빠르게 리턴하고 성공 로직만 남김public void.. 2024. 11. 12. 🤔 일급 컬렉션을 써야하는 이유 1. 😱 중복된 검증 로직의 지옥에서 탈출하기문제 코드//일급 컬렉션을 사용하지 않을 시public class RacingGame { public void race(List cars) { if (cars == null || cars.isEmpty()) { throw new IllegalArgumentException("자동차가 없습니다."); } if (cars.size() > 8) { throw new IllegalArgumentException("자동차가 너무 많습니다."); } // 게임 로직... } public void announceWinner(List cars) { .. 2024. 11. 12. 🫥 디미터 법칙의 오해 ❓고민: 데이터 활용 책임을 누구에게 맡길 것인가방법 1. 내부 데이터 전달private Rank calculateRankForLotto(Lotto lotto, WinningBalls winningBalls, BonusBall bonusBall) { // WinningBalls의 내부 데이터를 꺼내서 전달 int sameWinningCount = lotto.matchWith(winningBalls.getLottoNumbers());...}방법 2. 객체 자체 전달private Rank calculateRankForLotto(Lotto lotto, WinningBalls winningBalls, BonusBall bonusBall) { // 객체 자체를 전달 int sameW.. 2024. 11. 12. Google Java Style Guide 번역 본 글은 Google Java Style Guide를 번역한 글입니다.Google Java 스타일 가이드목차소개소스 파일 기본사항소스 파일 구조포맷팅네이밍프로그래밍 관행Javadoc1. 소개이 문서는 Java 프로그래밍 언어로 작성된 소스 코드에 대한 Google의 코딩 표준을 완전히 정의합니다. Java 소스 파일은 여기에 명시된 규칙을 준수할 때만 Google 스타일을 따른다고 말할 수 있습니다.다른 프로그래밍 스타일 가이드와 마찬가지로, 여기서 다루는 문제는 형식에 관한 심미적 문제뿐만 아니라 다른 유형의 규칙이나 코딩 표준도 포함됩니다. 그러나 이 문서는 주로 우리가 보편적으로 따르는 엄격한 규칙에 초점을 맞추고 있으며, (사람이나 도구에 의해) 명확하게 시행할 수 없는 조언은 피합니다.1.1 용.. 2024. 10. 15. [클린코드] 5 ~ 10장 1. 클래스 200줄 넘기지 않기 2. 외부 클래스 바로 의존하지 않고 경계 클래스 두기 나쁜 예) Map sensors = SensorsFactory().get(); // 외부 라이브러리 Sensor s = sensors.get(sensorId); 좋은 예) public class Sensors { private Map sensors = SensorsFactory().get(); public Sensor getById(String id) { return sensors.get(id); } // 이하 생략 } 3. 코드에 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 바로 단위 테스트이다. 테스트 케이스가 있다면 공포는 사실상 사라진다. 테스트 커버리지가 높을수록 공포는 줄어든다. 4. 테스트 당 as.. 2024. 3. 4. [클린코드] 4. 주석 1. 로직에 대한 설명을 주석으로 담지 마라 주석은 나쁜 코드를 보안하지 못한다. 주석으로 설명해야만 하는 코드는 나쁜 코드이다. 리팩토링을 고려하라. 2. 날짜에 대한 리턴타입을 제공하는 주석은 달아라 //kk:mm:ss EEE, MMM dd, yyyy 형식이다. Pattern timeMathcher = Pattern.compile( "||d*:||d||:d* ||w*, ||w* ||d*, ||d*"); 3. 코드로 설명할 수 있으면 주석을 달지마라. //기본 생성자 protected AnnaualDateRule() {} // this.closed가 true일 때 반환되는 유틸리티 메소드다. // 타임아웃에 도달하면 예외를 던진다. public synchronized oid waitForClose(fi.. 2024. 3. 4. [클린코드] 3.함수 1. 함수 내에 추상화 레벨을 같게 한다. 추상화 수준이 높음. getHtml() getFile() 추상화 수준이 중간. String pagePathName = PathParser.render(pagepath) 추상화 수준이 낮음. .append("\n") 어느 정도까지 구현되어 있는지 헷갈리지 않게, 함수 내에 추상화 레벨이 같은 메소드들을 만든다. 2. 플래그 인수를 전달하지 마라. 함수로 boolean 값을 전달하는 것은, 대놓고 함수가 여러 가지 기능을 처리한다는 것을 나타내는 것이다. 플래그 인수를 전달하는 것이 아니라, 각각을 처리하는 함수를 따로 구현하는 것이 옳은 방법이다. 3. 인수가 3개가 넘어간다면 묶을 수 있는지 의심해봐라. Circle makeCircle(double x, doub.. 2024. 3. 4. 이전 1 2 다음