본문 바로가기

Java

(12)
정적팩토리 메서드 명명 규칙 from 매개변수를 하나 받아서 해당 타입의 인스턴스를 반환하는 형변환 메서드 ex) Date d = Date.from(instant); of 여러 매개변수를 받아 적합한 타입의 인스턴스를 반환하는 집계 메서드 ex) Set faceCards = EnumSet.of(JACK, QUEEN, KING); valueOf from과 of의 더 자세한 버전 ex) BigInteger prime = BigInteger.valueOf(Integer.MAX_VALUE); instance 혹은 getInstance (매개변수를 받는다면) 매개변수로 명시한 인스턴스를 반환하지만, 같은 인스턴스임을 보장하지는 않는다. ex) StackWalker luke = StackWalker.getInstance(options); cr..
디폴트 메서드 정리 디폴트 메서드 1. 디폴트 메서드란? 자바 8부터 인터페이스에 메서드 구현을 포함시킬 수 있다. 이때 인터페이스에 구현하는 메서드를 디폴트 메서드라고 한다. 예시) public interface Interface { default void defaultMethod(){ System.out.println("디폴트메서드 입니다."); } } public class Client implements Interface { } public class Main { public static void main(String[] args) { Client client = new Client(); client.defaultMethod(); } //실행결과 //디폴트메서드 입니다. } 누군가는 디폴트 메서드를 포함한 인터페이스..
Optional 정리 Optional의 등장배경 NullPointerException 은 Java 로 개발을 하면서 가장 많이 겪는 예외 중 하나일 것이다. 우리는 이 NullPointerException 을 피하기위해 다음과 같은 코드를 짜곤한다. public String getCarName(Person person) { if (person != null) { Car car = person.getCar(); if (car != null) { return car.getName(); } } } 혹은 다음과 같은 방법도 있다. public String getCarName(Person person) { if (person == null) { return "Unknown"; } Car car = person.getCar(); if(..
람다 표현식을 활용한 디자인패턴 - 팩토리 패턴 디자인 패턴은 유용하다. 람다 표현식을 디자인 패턴에 적용한다면 더 간결하게 구현할 수 있다. 팩토리 패턴 팩토리 패턴을 사용하면 객체를 인스턴스화 할때 로직을 클라이언트에 노출하지 않을 수 있다. 코드로 살펴보자. 게임 캐릭터를 만들려고 하는데 두 가지 직업이 있다.(전사, 마법사) 팩토리 패턴을 이용하여 구현하면 다음과 같다. 1 2 3 4 5 6 7 8 9 10 11 12 public class CharacterFactory { public static Character createCharacter(String character) { switch (character) { case "warrior": return new Warrior(30, 20); case "wizard": return new Wi..
람다 표현식을 활용한 디자인패턴 - 의무 체인 패턴 디자인 패턴은 유용하다. 람다 표현식을 디자인 패턴에 적용한다면 더 간결하게 구현할 수 있다. 의무 체인 패턴 한 객체가 어떤 작업을 처리하고 다른 객체로 결과를 전달하여 또 다른 작업을 처리할 때 사용된다. 자동차 객체가 있다고 가정하자. 자동차 객체는 연비와, 속도, 사이즈의 필드변수를 가지고 있다. 코드로 살펴보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 public class Car { private int fuelEfficiency; private int speed; private int size; public Car(final int fuelEfficiency, final int speed, final int size) { t..
람다 표현식을 활용한 디자인패턴 - 옵저버 패턴 디자인 패턴은 유용하다. 람다 표현식을 디자인 패턴에 적용한다면 더 간결하게 구현할 수 있다. 옵저버 패턴 어떤 이벤트가 발생했을 때 한 주체가되는 객체가 다른 옵저버가 되는 객체에게 알림을 보내야 하는 상황에 사용된다. 예를 들어 유튜브 구독자에게 알림이 가능 상황을 예시로 들 수 있겠다. 다음 예제에서는 주식시장에서 주식 가격에 따라 자동으로 주식을 사고 파는 상황을 간단하게 구현해 보겠다. 첫째로 주체가 되는 객체를 구현하면 다음과 같다. 1 2 3 4 public interface Subject { void registerObserver(Observer o); void notifyObservers(int money); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public..
람다 표현식을 활용한 디자인패턴 - 템플릿 메서드 디자인 패턴은 유용하다. 람다 표현식을 디자인 패턴에 적용한다면 더 간결하게 구현할 수 있다. 템플릿 메서드 알고리즘 개요를 제시하고 알고리즘의 일부를 수정할 필요가 있을때 템플릿 메서드를 사용한다. 예를들어 라면을 끓이는 과정을 코딩해보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public abstract class 라면 { public void cook(){ prepareWater(); inputPowder(); inputNoodle(); } protected void prepareWater(){ System.out.println("물을 넣는다."); } protected abstract void inputPowder(); protected void inputNo..
람다 표현식을 활용한 디자인패턴 - 전략 패턴 디자인 패턴은 유용하다. 람다 표현식을 디자인 패턴에 적용한다면 더 간결하게 구현할 수 있다. 전략패턴 먼저, 다음과 같이 인풋에 대해 유효성을 검증을 전략패턴을 통해 구현할 수 있다. 1 2 3 4 public interface ValidationStrategy { boolean validate(String s); } 1 2 3 4 5 6 7 8 9 10 11 public class MyValidator { private final ValidationStrategy validationStrategy; public MyValidator(final ValidationStrategy validationStrategy) { this.validationStrategy = validationStrategy; } ..