결론 : 이론보다 실무가 먼저

처음부터 결론을 말해서 당황스러울 수도 있을 것이다. 하지만 내가 말하고자 하는 것은 코드를 먼저 타이핑해보고 이론을 공부하는 것이 좋다는 것이다. 또한 프로그래밍은 이론이 정립되기 전에 항상 실무에서 데이터가 쌓여야지 이론으로 채택되어지는 것이다.


이 책의 목적

훌륭한 OOP을 설계하고 유지보수하는 데 필요한 원칙과 기법을 설명하기 위해 쓰여진 책


예시) 티켓 판매 app

인스턴스를 생성하는 시점에 제약을 강제할 수 있도록 생성자를 추가

객체 지향 프로그래밍에서 객체의 생성에 있어 초기 상태를 안전하게 관리하는 방법에 관한 것이다. 생성자를 사용하면 객체가 생성될 때 필수적인 값이나 설정을 강제할 수 있게된다. 즉, 객체의 인스턴스를 만들 때 필요한 조건이나 규칙을 생성자를 통해 명시함으로써, 객체가 올바른 상태로 생성되도록 보장하는 방법을 말하고자 한다. 이를 통해 객체의 무결성을 유지하고, 잘못된 상태의 객체가 생성되는 것을 방지할 수 있게된다.


나만의 코드로 알아보자.

예를 들어, 은행 계좌 객체를 생성할 때 계좌 소유자의 이름과 초기 잔액이 필수적이라고 가정. 이러한 필수 정보 없이는 계좌 객체가 의미가 없거나 잘못된 상태로 존재할 수 있다, 생성자를 통해 이러한 필수 정보를 강제하면, 객체가 올바른 상태로 초기화되어 생성되도록 할 수 있게 된다.

public class BankAccount {
    private String owner;
    private double balance;

    public BankAccount(String owner, double balance) {
        if (owner == null || owner.isEmpty()) {
            throw new IllegalArgumentException("Owner cannot be null or empty");
        }
        if (balance < 0) {
            throw new IllegalArgumentException("Balance cannot be negative");
        }

        this.owner = owner;
        this.balance = balance;
    }
}

이런 식으로 구성할 수 있게 된다는 말이다. 이 예에서 생성자는 계좌 소유자의 이름과 초기 잔액이 제공되어야 하며, 이 두 조건이 충족되지 않으면 객체가 생성되지 않도록 함. 이렇게 하면 객체의 일관성과 무결성을 유지할 수 있게 되는 것이다. 즉, 객체지향적으로 설계 되었다고 봐도 무방하다.

책에서는 나의 예시와는 다르게 매표소, 티켓판매자, 청중가 이렇게 크게 3개의 객체로 나누고 행위에 대해서 나눴다.


소프트웨어 모듈의 3가지 목적

  1. 실행 중에 제대로 동작