Java
(13)
JUnit 5 Parameterized Tests 사용하기
혹시 테스트 코드를 작성할 때 아래와 같은 중복되는 코드를 작성하고 계신가요? @Test @DisplayName("User 생성 name 2자 미만 예외처리") void createUserException01() { IllegalArgumentException e = assertThrows(IllegalArgumentException.class, () -> new User(VALID_EMAIL, "q", password)); assertThat(e.getMessage()).isEqualTo(NAME_NOT_MATCH_MESSAGE); } @Test @DisplayName("User 생성 name 10자 초과 예외처리") void createUserException02() { IllegalArgumentE..
Java
2019. 12. 28. 19:33
자바 리플렉션이란?
작년 이맘때 궁금하지만 어려워서 넘어갔던 기술들이 있었습니다. 대표적으로 엘라스틱 서치와 리플렉션이 있었는데 최근에 하나씩 공부하면서 지난번과 달리 비교적 쉽게 체득할 수 있었는데요. 그 이유는 학습 방법의 변화 덕분입니다. 작년에 리플렉션을 공부할 때는 무작정 개념과 사용방법만 익히려고 했는데 이번에는 Why 에 초점을 맞춰서 공부했더니 더 쉽게 이해하고 활용을 잘할 수 있게 되었습니다. '이 기술은 왜 나왔을까? 왜 사용할까?' 를 이해하는 것은 중요합니다. 그래서 작년의 저와 같은 사람에게 도움이 되었으면 해서 리플렉션이 무엇인지 정리를 해보기로 했습니다. 리플렉션의 사용방법은 다루지 않습니다. 사용 방법은 아래 링크를 추천합니다 https://www.baeldung.com/java-reflecti..
Java
2019. 12. 28. 19:06
[객체지향] OCP (개방 폐쇄의 원칙 : Open Close Principle)
글의 순서 if-else의 문제점 OCP (Open Close Principle) 전략 패턴 (Strategy Pattern) OCP란? Open Close Principle : 개방폐쇄의 원칙 시간이 지나도 유지 보수와 확장이 쉬운 시스템을 만들고자 로버트 마틴이 명명한 객체지향설계 5대 원칙 SOLID중 하나입니다. OCP는 소프트웨어 구성 요소(컴포넌트, 클래스, 모듈, 함수)는 확장에 대해서는 개방(OPEN)되어야 하지만 변경에 대해서는 폐쇄(CLOSE)되어야 한다는 의미입니다. 즉, 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계가 되어야 한다는 의미입니다. 위 코드를 보시면 확장을 위해서 기존의 코드가 수정되었습니다. 이런 경우에 Close를 위반하게 됩니다. OCP에서 핵심은 ..
Java
2019. 12. 28. 17:50
[객체지향] if-else의 문제점
글의 순서 if-else의 문제점 OCP (Open Close Principle) 전략 패턴 (Strategy Pattern) 이번에 OCP와 전략패턴에 대해서 설명하려고 합니다. 자세한 이론적인 이야기 보다는 코드와 함께 가볍게 설명하면서 대충 이런거구나 느낄 수 있는 정도로만 소개하겠습니다. 자세한 이론은 참고할만한 링크를 남기겠습니다. 왜 OCP인가? 이해하기 위해서 먼저 if-else의 문제점을 파악하고 가겠습니다. 프로그래밍을 하다 보면 if 문을 많이 사용합니다. 하지만 if 문을 사용하면 몇 가지 문제점이 있습니다. 1. If-else의 문제점 변경, 확장이 될 수록 코드가 복잡해져서 수정할 위치를 찾기가 어렵다. 실수로 추가하지 않고 누락하는 경우가 생긴다. 즉, 유지보수가 점점 어려워집니..
Java
2019. 12. 28. 17:45
[Java] toString()에 대해서
어느 날 누가 내게 toString()은 언제, 어떻게 써야 하냐고 물었는데 대답할 수가 없었다. 그동안 생각 없이 toString()을 사용했구나! 생각이 들면서 마침 이펙티브 자바에 설명이 잘 되어있어서 정리 + 예제를 작성했다. 모든 하위 클래스에서 toString()을 재정의하라 toString의 규약은 "모든 하위 클래스에서 이 메서드를 재정의하라"고 한다. toString()을 재정의할 경우 이점으로는 아래와 같다. 로깅, 디버깅 또는 문자열로 만나는 모든 객체를 렌더링 할 수 있어야하는 상황에서 유용하다. 직접 호출하지 않더라도 다른 어딘가에서 쓰일 수 있다. 오류 메시지를 로깅할 때 자동으로 호출할 수 있다. (toString을 제대로 재정의하지 않는다면 쓸모없는 메시지만 로그에 남을 것이..
Java
2019. 12. 28. 17:37