Interface

· Java
디폴트 메서드(default method)란? 보통 인터페이스는 규칙을 잡거나, 서비스의 플로우 로직을 잡는 데 사용하곤 한다. 하지만 인터페이스를 구현하는 클래스에서는 메서드를 모두 구현해야하기 때문에 인터페이스에 메서드를 추가할때 문제가 발생한다. 메서드 하나를 추가하려면 해당 인터페이스를 구현하는 모든 클래스에서는 해당 메서드를 모두 구현해줘야 하는 것이다. Java8에서는 이러한 문제를 해결하기 위해 2가지 방법을 제공한다. 인터페이스 내부에 정적 메서드(static method)를 사용한다. 인터페이스의 기본 구현을 제공할 수 있도록 디폴트 메서드(default method) 기능을 사용한다. 인터페이스에 디폴트 메서드를 사용하여 메서드를 구현할 수 있다. 디폴트 메서드를 이용하면 인터페이스의 ..
· Java
Spliterator 인터페이스란? Spliterator는 분할할 수 있는 반복자라는 의미이다. Iterator 처럼 Spliterator는 소스의 요소 탐색 기능을 제공한다는 점은 같지만 Spliterator는 병렬 작업에 특화되어 있다. 커스텀 Spliterator를 꼭 구현해야 하는 건 아니지만 Spliterator가 어떻게 동작하는지 이해한다면 병렬 스트림 동작과 관련한 통찰력을 얻을 수 있다. java8은 컬렉션 프레임워크에 포함된 모든 자료구조에 사용할 수 있는 디폴트 Spliterator 구현을 제공한다. public interface Spliterator { boolean tryAdvance(Consumer
· Java
자바 8 라이브러리 설계자들은 java.util.function 패키지로 여러가지 새로운 함수형 인터페이스를 제공한다. Predicate java.util.function.Predicate 인터페이스는 test라는 추상 메서드를 정의하며 test는 제네릭 형식 T의 객체를 인수로 받아 boolean을 반환한다. T 형식의 객체를 사용하는 boolean 표현식이 필요한 상황에서 Predicate 인터페이스를 사용할 수 있다. @FunctionalInterface public interface Predicate { boolean test(T t); } public List filter(List list, Predicate P) { List results = new ArrayList(); for (T t:li..
· Java
추상클래스란? 클래스를 설계도에 비유한다면, 추상클래스는 미완성 설계도에 비유할 수 있다. 미완성이라는 것은 멤버의 개수에 관계된 것이 아니라 미완성 메서드(추상 메서드)를 포함하고 있다는 의미다. 추상클래스는 상속을 통해 자손클래스에 의해서만 완성할 수 있다. 추상클래스는 추상메서드를 포함하고 있다는 것을 제외하고는 일반클래스와 다르지 않다. 추상클래스를 상속받은 자손클래스에서는 추상클래스에서 선언된 추상메서드를 모두 구현해야 한다. 만약 하나라도 구현하지 않았을 경우 자손클래스도 동일한 추상클래스로 선언되어야 한다. abstract class Car { // 추상 클래스 boolean enginePower; String engineMode; abstract void engineOnOff(); abst..
· Java
다형성이란? 여러 가지 형태를 가질 수 있는 능력을 의미하며, 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있다. 참조변수가 사용할 수 있는 멤버의 개수는 인스턴스의 멤버 개수보다 같거나 적어야 한다. class Car { String brand; String engine; int door; ... } class SportCar extends Car { SportCar(String brand, int door) { super(brand, "sport", door); } } Car car = new SportCar("Kia", 4); // 조상클래스 타입의 참조변수로 자손클래스 인스..
· DDD
DIP(역전 의존 원칙)이란? 서비스가 특정 시스템에 의존성을 가지게 되면 서비스 자체만으로 테스트 수행이 어렵고 종속되는 시스템에 따라 서비스의 코드가 지속적으로 변경될 여지가 있다. 저수준 모델이 고수준 모델에 의존하도록 바꾸는 것 변경에 유연하고 테스트가 쉬움 핵심은 의존 관계를 맺을 때 변화하기 쉬운 것에 의존하기보다는, 변화하지 않는 것에 의존 해야한다. 예시 신용카드 클래스를 만든다고 했을때 신용카드에는 여러가지 종류에 은행이 있을것이다. class ShinhanCard { // 신한카드 public void pay() { // 결제 ... } public void pause() { // 카드정지 ... } } class HyunDaiCard { // 현대카드 public void pay() ..
beekei
'Interface' 태그의 글 목록