추상 클래스와 인터페이스는 존재 목적이 다르다. 추상 클래스: 자신을 상속받아서 기능을 이용하고 확장하는 용도 인터페이스: 함수의 구현을 강제하여 구현 객체의 같은 동작을 보장하는 용도 1. 클래스는 하나의 추상 클래스만 상속받을 수 있지만 인터페이스는 여러 개 구현할 수 있다. 즉 인터페이스는 여러개 구현할 수 있지만 java는 단일 상속만 허용하기 때문이다. 왜...? 단일 상속일까? 인터페이스의 목적은 함수의 구현을 강제한다고 했다. 즉 서로 다른 Interface에 같은 추상 메서드가 있을 때 Override가 필수이기 때문에 자신이 Override로 작성한 메서드가 호출이 될 것이다. public class Main extends A implements C, D { @Override public..
전체 글
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUr95D%2Fbtsro60WNUL%2F2qXQ0vfZyEVOkCrW5xXq1K%2Fimg.jpg)
LocalDate, LocalTime, Instant, Duration, Period 클래스 (java.time 패키지) Month의 인덱스는 0부터 시작, DateFormat같은 기능은 Date클래스에만 작동, 스레드가 동시에 하나의 formatter로 날짜를 파싱할 때 예기치 못한 결과가 일어나는 다양한 이슈들로 인해 java8에서 시간 라이브러리(Joda-Time)의 많은 기능을 java.time 패키지로 추가했다. LocalDate와 LocalTime 사용 팩토리 메서드 of로 LocalDate 인스턴스를 만들 수 있으며 now는 시스템 시계의 정보를 이용해서 현재 날짜 정보를 얻는다. LocalDate date = LocalDate.of(1999, 9, 27); LocalDate now = Lo..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSX7HL%2Fbtsq0yimS7T%2FJIGYnDr3ZJJ0Xzook4l7Y0%2Fimg.jpg)
예기치 않은 NullPointException을 피하기 위해 필요한 곳에 다양한 null 확인 코드를 추가해서 null 예외 문제를 해결해야 한다. null이 들어오지 않는 영역을 제외하고는 변수를 참조할 때마다 null을 확인해야 한다. public String getCarInsuranceNameNullSafe(Person person) { String unknown = "Unknown"; if (person == null) { return unknown; } CarV1 car = person.getCar(); if (car == null) { return unknown; } Insurance insurance = car.getInsurance(); if (insurance == null) { retu..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqsCZj%2Fbtsp64wF78j%2F3x766XIJ2r0AyNVXGiHuf0%2Fimg.jpg)
개발팀과 도메인 전문가가 이해할 수 있는 코드는 생산성과 직결되기 때문에 코드는 읽기 쉽고 이해하기 쉬워야 한다. 도메인 전용 언어(DSL)는 특정 도메인을 대상으로 만들어진 프로그래밍 언어로 이 문제를 해결할 수 있다. 도메인 전용 언어(domain-specific languages, DSL) DSL은 범용 프로그래밍 언어가 아니며, 특정 비즈니스 도메인의 문제를 해결하려고 만든 언어다. 특정 도메인에만 국한되므로 오직 자신의 문제를 어떻게 해결할지에만 집중할 수 있고 특정 도메인의 복잡성을 잘 다룰 수 있다. DSL을 개발하기 위한 두가지 필요성 의사 소통의 왕: 프로그래머가 아닌 사람도 이해할 수 있도록 코드의 의도가 명확히 전달되어야 한다.(코드가 비즈니스 요구사항에 부합하는지 확인할 수 있다.)..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbG2vL1%2FbtspRiVk2Nb%2FqHKXfyGoJZUAxVJxfBTs1K%2Fimg.jpg)
일반적으로 코드 가독성이 좋다는 것은 '어떤 코드를 다른 사람도 쉽게 이해할 수 있음'을 의미한다. 익명 클래스를 람다 표현식으로 리팩터링하기 하나의 추상 메서드를 구현하는 익명 클래스는 람다 표현식으로 리팩터링할 수 있다. new Thread(new Runnable() { @Override public void run() { System.out.println("Hi~"); } }).start(); new Thread(()-> System.out.println("Hi~")).start(); 익명 클래스를 람다 표현식으로 변환하기 위한 조건 익명 클래스에서 사용한 this와 super는 람다 표현식에서 다른 의미를 갖는다. 익명 클래스에서 this는 익명 클래스 자신을 가르키지만 람다에서 this는 람다를..