public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository = new MemoryMemberRepository();
//private final DiscountPolicy discountPolicy= new FixDiscountPolicy();
private final DiscountPolicy discountPolicy= new RateDiscountPolicy();
@Override
public Order createOrder(Long memberId, String itemName, int itemPrice) {
Member member = memberRepository.findById(memberId);
int discountPrice = discountPolicy.discount(member, itemPrice);
return new Order(memberId, itemName, itemPrice, discountPrice);
}
}
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository = new MemoryMemberRepository();
private DiscountPolicy discountPolicy;
@Override
public Order createOrder(Long memberId, String itemName, int itemPrice) {
Member member = memberRepository.findById(memberId);
int discountPrice = discountPolicy.discount(member, itemPrice);
return new Order(memberId, itemName, itemPrice, discountPrice);
}
}
NullPointerException
NullPointerException은 프로그래밍에서 매우 흔히 발생하는 예외 중 하나입니다. 이 예외는 변수가 null 값을 가지고 있는데 해당 변수를 참조하려고 할 때 발생합니다. Java와 같은 언어에서는 객체 지향 프로그래밍을 사용하는데, 이때 객체가 생성되지 않았거나 null로 초기화되었을 때 해당 객체의 메서드나 속성을 호출하면 NullPointerException이 발생할 수 있습니다.
예를 들어, 다음과 같은 상황에서 NullPointerException이 발생할 수 있습니다
- 객체를 생성하지 않고 해당 객체의 메서드를 호출하는 경우:
- 배열을 선언만 하고 초기화하지 않은 경우
- 메서드가 null을 반환하는데 이를 호출한 곳에서 반환값을 처리하지 않는 경우
String str = null; str.length(); // NullPointerException 발생
int[] arr;
System.out.println(arr.length); // NullPointerException 발생
public String getName() { return null; }
public static void main(String[] args) {
String name = getName(); System.out.println(name.length()); // NullPointerException 발생 }
NullPointerException은 코드의 버그를 나타낼 수 있으며, 이를 방지하기 위해 코드를 안전하게 작성하는 것이 중요합니다. 이를 위해 null 체크를 하거나, Optional과 같은 Java 8부터 제공되는 기능을 사용하여 Null 포인터 예외를 방지할 수 있습니다.