Category: Java

Enum에서 메서드 참조와 BiFunction 사용하기

요약 int matchCount와 boolean bonusMatch를 BiFunction를 통해 해당 Enum 객체를 찾을 수 있다. 문제 배경 (안좋은 사례 모음) 로또 순위를 Enum LottoRank로 등수와 상금을 관리하고자 한다.LottoRank가 맞춘 번호 갯수와 보너스 번호 맞춤여부를 전달받아 등수를 판별해야 한다. LottoRank에

Junit으로 parameterized test

요약 @ParameterizedTest 어노테이션과 함께 @MethodSorce나 @ValueSource를 통해 한 테스트 메서드에 여러번 파라미터를 넘길 수 있다. @MethodSource 도입 배경 자동차 이름의 글자 갯수가 5개 이하여야 하고, 자동차 이름이 빈 문자열이면 안되고 등등 다양한 제약 사항을 테스트해보고 싶다고 하자.근데 테스트 코드

자바의 예외 Throwable, Error, Exception

요약 Throwable -> Exception -> RuntimeException 등 다양한 예외Throwable은 stackTrace 생성 등 예외에 필요한 다양한 일을 함Exception은 예외 메시지를 받아 초기화할 수 있다RuntimeException은 치명적이진 않은 예외를 뜻함.RuntimeException은 치명적일 수 있는 에외

자바 사용자 정의 예외 만들기

요약 예외를 상속하는 클래스를 통해 예외를 만들 수 있다.생성자를 통해 에러 메시지를 초기화 할 수 있다. 배경 12345public void checkCarNameEmpty(String carName) { if (carName == null || carName.equals("")) { throw new R

자바 일급 컬렉션 활용해보기

요약 일급 컬렉션은 컬렉션 객체를 감싸는 객체를 말한다.일급 컬렉션은 객체를 만들 때 검증해야 할 로직을 모아 둘 수 있다.일급 컬렉션은 해당 컬렉션이 행해야 할 책임을 모아 둘 수 있다. 불변성을 지키기 위해서는 setter 금지. 일급 컬렉션의 멤버 변수를 초기화할 때 가져온 인자를 새로운 주소값으로 재할당 getter 할 때 불변 객체 반

자바에서 정규 표현식 잘 활용하기

요약 Pattern 클래스와 Matcher 클래스를 활용해서 자바 정규 표현식을 잘 표현한다. 특히 Matcher클래스에 정규 표현식을 compile(String)하고, matcher(String)으로 대상 문자열을 전달해준다.이때 find()메서드를 반드시 실행해줘야 정상적으로 Matcher 객체에 관련 내용이 할당된다!! Pattern 클래스로 정규

메시지와 인터페이스

메시지, 인터페이스메시지는 객체들이 협력하기 위해 사용할 수 있는 유일한 의사소통 수단이다.메시지는 오퍼레이션 이름과 인자로 구성된다. receiver.message(argument); 이렇게 메시지를 구성할 수 있다. 메시지와 메서드그렇지만 메시지가 한 메서드를 가르키는 건 아니다.메서드는 메시지를 수신하는 객체, 인자에 따라 달라진다.메서드는 메시지를

13. Comparable과 Comparator의 차이!

Comparable과 Comparator의 차이결론둘 다 객체의 비교 기준을 마련하는 인터페이스. Comparable은 **compareTo(T t)**로 자기 자신과 다른 객체의 비교.Comparator은 compare(T t, T u) 자기 자신이 아닌 다른 두 객체 간의 비교. Comparable은 Arrays.sort()나 Collections.so

책임 할당을 위한 GRASP 패턴

GRASP 패턴일반적인 책임 할당을 위한 소프트웨어 패턴. 객체에게 책임을 할당할 때 지침으로 삼을 수 있는 원칙들. 영화 예매 시스템을 통해 GRASP 패턴을 익혀보자. 도메인 개념에서 출발하기어떤 책임을 할당해야 할 지 고민해야 될 때 가장 먼저 고려해야 할 게 도메인이다. 영화에는 금액 할인 영화, 비용 할인 영화가 있다. 할인 조건에는 순번 조건

응집도와 결합도

응집도와 결합도응집도모듈 내부 요소가 연관된 정도.모듈의 내부 요소가 한 목적을 위해 긴밀하게 협력하는 정도. 높을 수록 좋다. 좀더 구체적으로 설명하면, 하나의 변경이 발생할 때 모듈 내부에서 발생하는 변경의 정도하나 바꾸려고 할 때, 모듈 전체를 바꿔야 되면 응집도가 높은 것. 하나의 변경이 일어날 때, 모듈 하나만 바꿔서 해결 가능하면, 응집도가 높은

9. 템플릿 메서드 패턴

템플릿 메서드 패턴템플릿 메서드 패턴은 특정 역할의 책임을 한 메서드에 여러 메서드를 조합*(이게 템플릿!)*으로 정해놓는 패턴이다. 템플릿 메서드를 구성하는 메서드들은 역할에 속하는 객체마다 다르게 구현될 수 있다. 활용 예시우리는 여러 DB에 연결해야 한다. 우리가 연결한 DB는 모두 다음과 같은 절차를 따른다고 하자.해당 DB드라이버 찾기 - DB에

객체지향의 역할, 책임, 협력

역할, 책임, 협력하나의 프로그램을 만들기 위해서는 다양한 객체가 자신의 로직을 실행해서 전체 기능을 완성한다. 중요한 건, 다양한 객체가 한 기능을 만들기 위해 메시지 를 주고 받으며 상호작용한다는 사실이다. 이처럼 어플리케이션의 기능을 완성하기 위해 여러 객체가 상호작용하는 것을 협력이라고 한다. 각 객체들이 수행하는 자신의 로직을 책임이라고 하고, 객

자바 코딩 규칙(Java Code Conventions)

자바 소스 파일 구조시작 주석 package 문 import 문 Class 혹은 Interface 선언 시작 주석모든 소스 파일은 다음과 같은 시작 주석을 써줘야 한다. 123456789/* *클래스 이름 * *버전 정보 * *날짜 * *저작권 주의 */ package문 import문일반적으로 패키지문을 먼저 쓰고, 임포트문을 다음에 써준다. 두 문

8. 상태 패턴

상태 패턴객체의 특정 상태에 따라 객체의 행동이 달라지는 상황에서,객체의 상태를 본인이 체크해서 행동을 달리하는 것이 아니라,상태를 객체화해서 상태가 행동을 책임지도록 위임하는 패턴. 특정 상태를 캡슐화하는 인터페이스를 선언하고,원래 객체에서 해당 인터페이스를 구성하도록 설계한다. 상태 인터페이스를 구현한 여러 상태 객체들을 만들어서 활용한다. 활용 예시자

인터페이스와 추상클래스의 차이(feat. 데코레이터 패턴)

인터페이스와 추상 클래스의 차이를 잘 느낄 수 있는 예제를 가져왔다. 데코레이터를 인터페이스로 구현해본다고 하자. 인터페이스로 데코레이터를 구현한다면?패션 모델에게 각종 의류를 데코레이터로 적용하는 예시를 인터페이스로 구현해보자. 12345//모델의 역할은 런웨이를 하는 것.public interface Model { void runway()