본문 바로가기

전체 글79

인터페이스 - 타입을 정의하는 용도로만 사용하기 인터페이스의 역할 인터페이스는 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 한다. → 클래스가 인터페이스를 구현한다는 것 : 자신의 인스턴스로 무엇을 할 수 있는 지 의미를 전달 인터페이스는 위에서 언급한 용도로만 사용되어야 한다. 잘못된 인터페이스의 용도 상수 인터페이스 상수 인터페이스 : 메서드 없이, 상수를 뜻하는 static final 필드로 구성된 인터페이스 public interface PhysicalConstants { // 아보가드로 수 (1/몰) static final double AVOGADROS_NUMBER = 6.022_140_857e23; // 볼츠만 상수 (J/K) static final double BOLTZMANN_CONSTANT = 1.380_648_52e.. 2022. 2. 7.
인터페이스 설계 - 구현하는 개발자를 생각하자 # default Method 자바 8 이전 기존 구현체를 깨뜨리지 않고, 인터페이스에 메서드 추가 방법 전무후무 - 인터페이스에 메서드 추가하면 대부분 컴파일 오류 발생 - 추가된 메서드가 기존 구현체에 존재할 가능성 희박 자바 8 이후 기존 인터페이스에 메서드를 추가할 수 있도록 디폴트 메서드 추가 핵심 컬렉션 인터페이스들에 많은 디폴트 메서드 추가 for lambda 활용 디폴트 메서드 선언시, 그 인터페이스를 구현한 후에 디폴트 메서드를 재정의하지 않은 모든 클래스에서는 디폴트 구현이 사용 단, 디폴트 메서드는 구현 클래스에 대한 정보 없이 무작정 삽입(추가) 된 것이므로 주의해야 한다. 자바 라이브러리의 디폴트 매서드는 코드 품질이 높고 범용적이므로 대부분의 상황에서 잘 작동 하지만, 생각할 수.. 2022. 2. 7.
인터페이스가 추상 클래스보다 우선인 이유 자바가 제공하는 다중 구현 메커니즘 - Interface (자바 8부터 default 메서드 제공) - Abstract Class 인터페이스와 추상 클래스 공통점 선언 내용은 존재, 하지만 구현 내용은 없음(추상 메서드를 가진다) 인스턴스 생성이 불가하다. 각각의 목적 인터페이스 Has - A 관계 : 함수의 껍데기만 존재하여 구현을 강제화 함 이를 통해 구현 객체가 같은 동작을 하도록 보장 다중 상속 - 여러개의 인터페이스를 구현이 가능하다. 인스턴스 필드를 가질 수 없고, public이 아닌 정적 멤버도 가질 수 없다(자바 9 부터 private static 메서드 구현 가능) 추상 클래스 IS - A 관계 : 추상 클래스를 상속하여 해당 클래스의 기능을 이용하고 또는 기능을 추가한다. 다중 상속 -.. 2022. 2. 6.
Clean Code - #6 객체와 자료 구조 우리는 남들이 변수에 의존하지 않기 위해 변수를 비공개로 정의한다. (private) 그런데 왜 getter와 setter 를 당연히 public 으로 외부에 노출할까? 먼저 객체와 자료구조의 특징을 살펴보자 객체 동작을 공개하고 자료를 숨긴다. 기존 동작을 변경하지 않으면서 새 객체 타입을 추가하기 쉬운 반면, 기존 객체의 새 동작을 추가하기는 어렵다. 자료 구조 별다른 동작 없이 자료를 노출 기존 자료구조에 새 동작을 추가하기는 쉬우나, 기존 함수에 새로운 자료 구조를 추가하기는 어렵다. 우리는 사용자가 내부 구현 구조를 모른 채, 필요한 자료의 핵심만 조작할 수 있도록 클래스를 설계해야한다. 자료 추상화 객체의 변수 사이에 메서드를 넣는다고 구현을 외부로 숨길 수는 없다. 구현을 감추기 위해서는 추.. 2022. 1. 31.
Kafka Streams kafka streams - kafka 에서 공식적으로 지원하는 라이브러리 토픽에있는 데이터를 낮은 지연률로 빠른 속도로 데이터 처리 가능 장점 1. 카프카와의 호환성 카프카의 버전정보에 대해 다른 툴들은 완벽한 호환성을 제공하지 않지만 카프카 스트림즈는 카프카 호환성을 걱정하지 않아도 된다. 유실과 중복 처리 방지에 대한 완벽한 기능을 제공하고 있다. 2. 스케줄링 도구가 필요없다 스파크 스트리밍과 연동해서 사용한다면 마이크로 배치 서비스를 구축 할 수 있지만 이를 위해 클러스터 관리자, 리소스 관리자가 필요하고 또한 서버들도 필요합니다. 하지만 Kafka Streams는 다른 것 필요없이 스트림즈 어플리케이션만 가지고 사용할 수 있습니다. 3. 스트림즈 DSL , 프로세서 API 제공 많은 기능들을 .. 2022. 1. 20.
kafka - Consumer Consuemr는 데이터를 가져가도 kafka 내에서 데이터가 사라지지 않음 -> 아주 유용한 유연성을 제공 Consumer 의 역할 - topic의 파티션으로부터 데이터 polling - partition offset 위치 기록(커밋) - Consumer 그룹을 통해 병렬 처리 # 토픽 파티션에서 레코드 조회 prop - 옵션 설정 변수 group 1 - > 컨슈머 그룹 설정 consumer.subscribe - 읽을 토픽 설정 polling 루프 - poll 메서드가 포함된 무한 루프 poll() 설정한 시간동안 기다리고 데이터를 가져온다 이 때 데이터가 없다면 그냥 빈값을 반환 가장 작은 단위 : record # 파티션 - 그룹 단위 할당 파티션의 개수보다 컨슈머의 개수가 많아지면, 컨슈머는 놀게된.. 2022. 1. 18.