목록분류 전체보기 (181)
초보개발자 긍.응.성
인터페이스 설계에 주의할 점에 대하여 짚고 넘어가자 디폴트 메서드 자바 8 이전에는 기존 구현체를 깨뜨리지 않고는 인터페이스에 메서드를 추가할 방법이 없었다. 자바 8에 와서 디폴트 메서드를 통해 기존 인터페이스에 메서드를 추가할 수 있게 되었지만, 이로써 발생할 수 있는 문제들 또한 존재한다. 디폴트 메서드를 선언하면, 그 인터페이스를 구현한 후 디폴트 메서드를 재정의하지 않은 모든 클래스에서 디폴트 구현이 쓰이게 되어있다. 디폴트 메서드는 구현 클래스에 대해 아무것도 모른채 무작정 '삽입'될 뿐이다. 그리고 이러한 디폴트 메서드의 삽입이 불변식을 깨트릴 수 있다. 디폴트 메서드의 추가로 생길 수 있는 문제 자바 8의 Collection 인터페이스에 removeIf 메서드와 이에 대한 디폴트 메서드가 ..
MongoDB 란? mongoDB(몽고 DB)는 확장성과 유연성을 갖춘 cross-platform document-oriented database입니다. NoSQL로 분류되며, JSON 형식과 같은 document를 이용하여 동적인 스키마를 가집니다. MongoDB의 특징 몽고DB는 JSON 형식으로 생긴 document를 통해 유연하게 데이터를 저장합니다. 이때 언급한 유연함이란 각 필드의 document는 고정된 데이터 구조를 가지지 않고 모두 다를 수 있는 것을 의미합니다. 실제 저장시에 BSON이라는 바이너리 JSON 형태로 저장됩니다 document model은 애플리케이션 코드의 객체에 쉽게 매핑되므로, 쉽게 데이터를 가져와 이용할 수 있습니다. 애드 혹 쿼리(Ad hoc queries), 색..
추상 클래스와 인터페이스의 차이 자바가 제공하는 다중 구현 메커니즘은 인터페이스와 추상 클래스가 존재한다. 이 둘의 가장 큰 차이점은 추상 클래스가 정의한 타입을 구현하는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야 한다는 것이다. 자바는 단일 상속만을 지원하므로, 추상 클래스 방식은 새로운 타입을 정의하는데 큰 제약을 갖게 된다. 반면 인터페이스가 선언한 메서드를 모두 정의하고 그 일반 규약을 잘 지킨 클래스라면 다른 어떤 클래스를 상속했든 같은 타입으로 취급받는다. 인터페이스의 장점 기존 클래스에도 손쉽게 새로운 인터페이스를 구현해넣을 수 있다. 인터페이스는 믹스인(mixin) 정의에 안성맞춤이다. 믹스인은 구현한 클래스에 원래의 '주된 타입' 외에도 특정한 선택적 행위를 제공한다고 선언하는 ..
상속(extends)과 컴포지션에 대하여 알아보자. 상속 (inheritance) 상속은 코드를 재사용하는 강력한 수단이다. 하지만 잘못 사용하면 오류를 내기 쉬운 소프트웨어를 만들게 된다. 상속의 위험성 캡슐화를 깨뜨린다. 상위 클래스가 어떻게 구현되느냐에 따라 하위 클래스의 동작에 이상이 생길 수 있다. 상위 클래스의 수정이 하위 클래스가 영향을 끼친다. 새로운 메서드가 추가된다면 하위 클래스에서 의도에 맞게 동작하도록 수정하여야 한다. 컴포지션 (Composition) 앞서 상속을 사용할 때 일어날 수 있는 위험성에 대하여 이야기하였다. 하지만 컴포지션을 통해 앞서 본 문제들을 피해 갈 수 있다. 컴포지션은 기존 클래스가 새로운 클래스의 구성요소로 쓰인다는 것을 의미한다. 새로운 클래스는 컴포지션을..
불변 클래스의 장단점과 생성 방법을 알아보자. 불변 클래스 불변 클래스는 인스턴스의 내부 값을 수정할 수 없는 클래스다. 이 정보는 객체가 파괴되는 순간까지 절대 달라지지 않는다. 불변 클래스의 예시로는 String, 기본 타입의 박싱 된 클래스, BigInteger, BigDecimal이 존재한다. 불변 클래스로 만들기 위한 규칙 객체의 상태를 변경하는 메서드(변경자)를 제공하지 않는다. 클래스를 확장할 수 없도록 한다. 모든 필드를 final로 선언한다. 모든 필드를 private로 선언한다. 자신 외에는 내부의 가변 컴포넌트에 접근할 수 없도록 한다. public final class Complex { // final 클래스 - 확장 불가 private final double re; // 필드를 p..
Logback은 로그 이벤트를 출력하는 방법으로 Appender를 이용합니다. 분산 서버 환경에서 ConsoleAppender나 FileAppender들을 이용한다면 해당 로그들은 서버 내에 쌓이게 됩니다. 이번 글에서는 애플리케이션에서 발생한 로그 이벤트를 아파치 카프카를 통하여 Publish 하는 방법에 대하여 다뤄보겠습니다. Appender에 대하여 더 알아보고 싶다면 Logback - 4.Appenders (1). ConsoleAppender, FileAppender를 참고해주세요. logback-kafka-appender Log4j는 KafkaAppender를 직접 지원하지만 Logback의 경우 오픈소스로 제공되는 logback-kafka-appender를 사용합니다. logback-kafka..