본문 바로가기

Java/예제

객체지향 강의 예제 - 1

예제 1

class Phone {
    String model;
    String color;
    static int price;
}

public class Main {
    public static void main(String[] args) {
        Phone galaxy = new Phone(); 
        galaxy.model = "Galaxy10";
        galaxy.color = "Black";
        galaxy.price = 10000;

        Phone iPhone = new Phone(); 
        iPhone.model = "iPhone";
        iPhone.color = "Black";
        iPhone.price = 10000;
        
        String condition = "조건";
        ...
				...
				...
				...
        //할인 조건이 맞으면(2022년11월15일13시 이후부터 1000원 할인)
        LocalDateTime conditionDateTime = LocalDateTime.of(2022, 11,15,13,00);
        if(conditionDateTime.isBefore(LocalDateTime.now())) {
					  galaxy.price = galaxy.price - 1000;            
        }

				...
				...
				...
				...
        //할인 조건이 맞으면(2022년11월15일13시 이후부터 1000원 할인)
        if(conditionDateTime.isAfter(LocalDateTime.now())) {
			      iPhone.price = iPhone.price - 1000;
        
        ....

        ....

      
        System.out.println("가격 : " + galaxy.price);
           
    }
}

예제 2

public class Phone {
    private String model;
    private String color;
    private int price;

    public Phone(String model, String color, int price) {
        this.model = model;
        this.color = color;
        this.price = price;
    }

    // inv vs Integer, boolean vs Boolean
    public int getDiscountPrice(Condition condition) {
        if (condition.isValid()) {
            this.price = price - 1000;
        }
        return this.price;
    }

}
public class DateTimeCondition implements Condition {
    public boolean isValid() {
        //할인 조건이 맞으면(2022년11월15일13시 이후부터 1000원 할인)
        if(conditionDateTime.isAfter(LocalDateTime.now())) {
		       return true; 
        }
        // 조건이 무한 확장 가능
    }
}

public interface Conditon {
     public boolean isValud();
}



public class Main {
    public static void main(String[] args) {
    Phone phone = new Phone("model", "color", 10000);
        int price = phone.getDiscountPrice(new DateTimeCondition());
        System.out.println(price);       
    }
}

두 예제의 차이는 무엇일까?

일단 두번째 예제에서는, 객체에 들어가는 파라미터를을 private처리 해주었다. 그리고, 할인가격은 phone클래스 안에, 할인조건은 따로 클래스를 생성해주었다.

이는 첫번째 예제에서는 전부 main()함수안에 들어가있는 조건들이다.

이렇게 바꾸면 좋은 점이 무엇일까?

나는 데이터의 변화가 용이하다고 생각한다. 만약 예제1처럼 되어있는 코드에서 할인 조건 일시가 바꾸거나 할인 금액이 바꾸면 예제 1에는 없다지만 수많은 코드들을 뒤집으며 관련 코드들을 찾아야 할 것이다.

예제 2에서는 예제 1보다는 훨씬 찾기 편할 것이다.

phone 클래스의 price파라미터가 private로 선언되어 있는이상 다른 클래스에서 함부로 가져다 변경 할 수 없고, 가져다 변경하게 만들어도 phone class안에서 함수를 선언해 변경할 것 이기 때문이다.

결국 phone이라는 클래스만 잘 보면 관련 코드들을 쉽게 찾을 수 있다는 소리다.

'Java > 예제' 카테고리의 다른 글

계산기 만들기  (0) 2022.11.20
Stream 예제  (0) 2022.11.17
리스트 - ArrayDeque  (0) 2022.11.16
컬렉션 - Queue  (0) 2022.11.16
컬렉션 - Stack  (0) 2022.11.16