Interface와 Class 설계 원칙

박근수·2024년 11월 26일
0

01. Abstract class 보다는 interface를 우선하라

Extends vs Implements

//extends는 하나만 가능
public class Sub extends Super implements Serializable, Cloneable{}
public interface Sub extends Serializable, Cloneable{}

Ex) 배달 앱

public class Restaurant extends Delibary {}

//포장 주문의 필요성이 생겼지만 한 class 밖에 상속 불가
public class Restaurant implements Delibariable, Packable{}

//interface default method
public interface Packable{
	dafualt void packOrder(){
    	System.out.println("포장 주문이 들어왔습니다.");
    }
}

02. 인터페이스는 타입을 정의하는 용도로만 사용하라

Constant static final은 ani pattern

클래스 내부에서 사용하는 상수는 내부 구현에 해당된다.
오히려 사용자에게 혼란을 줄 수 있다.
차라리 클래스에 static final로 추가하는 것이 더 낫다.

public class OrderService{
	public static final double SECOND_TO_MIN = 60;
}

//만약 여러 곳에서 사용해야할 값이란 util class
pulbic class TimeConvertUtil{
	public static final double SECOND_TO_MIN = 60; 
    public static double secondToMin(double second){
    	return second / SECOND_TO_MIN;
    }
}

03. 멤버 클래스는 되도록 static으로 만들라

Nested class - Member class

Nested 되어 있는 member class가 독립적으로 존재할 수 없으며 바깥 instance 없이는 생성할 수 없어야 함

@Data
public class User{
	private String name;
    private Address address;
    
    @Data
    public class Address{
    	String zipcode;
    }
    public String getUserName(){
    	//의미가 있는 메서드는 아님
        //접근 범위 설명 위해 추가
        return nmae
    }
}

///
User user = new User();
user.new Address();

Nested class - static Member class

Nested 되어 있는 member class가 독립적으로 존재할 수 있음

public class Customer{
	private int age;
    private Address address;
    public String printBarCode(){
    	return address.fullAddress + address.zipcode;
    }
    
    private static class Address{
    	private String fullAddress;
        private String zipcode;
    }
}

Nested class

Method 밖에서 사용할 것이다 - member class
그 중 member class가 바깥 instance를 참고한다 -> not-stati 그 외 -> static
딱 한 곳에서 사용하거나 사전 struct가 있다 -> Anonymous class or local class
profile
개발블로그

0개의 댓글