[JAVA] 기본 데이터 형식보다 객체를 사용하는 5가지 이유

조시현·2024년 6월 30일
0

클린코드

목록 보기
3/4
post-thumbnail

객체 지향 프로그래밍(OOP)에서는 기본 데이터 유형(예: int, char 또는 boolean) 대신 객체를 사용하도록 권장합니다. 👍

왜일까요?
그 이유에 대해서 은행 계좌에 대한 예시와 함께 알아보겠습니다. 😀

1. 가독성 및 유지보수성 향상 👀

public class BankAccount {
    private double balance;

    public BankAccount(double initialBalance) {
        this.balance = initialBalance;
    }

    public void deposit(double amount) {
        balance += amount;
    }

    public void withdraw(double amount) {
        잔액 -= 금액
    }

    public double getBalance() {
        잔액을 반환합니다;
    }
}

객체를 사용하면 기본 유형과 별도의 함수를 사용하여 잔액을 관리하는 것보다 훨씬 명확합니다. 클래스 및 메서드 이름은 코드의 목적과 기능을 명시적으로 전달하여 가독성과 유지보수성을 향상시킵니다.

2. 유연성 및 확장성 🚀

객체를 사용하면 나중에 기능을 확장하거나 변경 사항을 도입하기가 더 쉬워집니다. 새로운 요구 사항이나 기능은 객체 메서드를 수정하거나 서브클래스를 생성하여 기존 코드에 영향을 주지 않고 기능을 확장함으로써 해결할 수 있습니다.
예를 들어, BankAccount 클래스에 이자 계산을 추가할 수 있습니다.

public class SavingsAccount extends BankAccount {
    private double interestRate;

    public SavingsAccount(double initialBalance, double interestRate) {
        super(initialBalance);
        this.interestRate = interestRate;
    }

    public void addInterest() {
        double interest = getBalance() * interestRate;
        deposit(interest);
    }
}

원래의 BankAccount 클래스를 변경하지 않고 새로운 기능을 통합합니다.

3. 재사용 가능성 ♻️

객체를 사용하면 코드베이스 전체에서 유사한 기능을 재사용할 수 있으므로 중복을 줄이고 유지보수성을 향상시킬 수 있습니다. 재사용 가능한 클래스를 설계하면 애플리케이션의 여러 부분에서 동일한 코드를 활용할 수 있습니다.
예를 들어, Person 클래스는 다양한 컨텍스트에서 사용할 수 있습니다.

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

Person 클래스는 직원 관리, 고객 기록 또는 사용자 프로필에 사용하여 코드 재사용을 촉진할 수 있습니다.

4. 테스트 가능성 개선 🧪

객체를 사용하면 동작을 독립적으로 테스트하기가 더 쉬워집니다. 객체 내에서 기능을 캡슐화하면 단위 테스트를 작성하여 개별 클래스의 동작을 검증할 수 있습니다. 이러한 모듈성은 테스트 케이스 생성을 간소화하고 코드베이스의 안정성을 향상시킵니다.
BankAccount 클래스를 테스트하는 것이 간단해집니다.

@Test
public void testDeposit() {
    BankAccount account = new BankAccount(100);
    account.deposit(50);
    assertEquals(150, account.getBalance(), 0.001);
}

@Test
public void testWithdraw() {
    BankAccount account = new BankAccount(100);
    account.withdraw(30);
    assertEquals(70, account.getBalance(), 0.001);
}

이 테스트는 입금출금 메서드의 기능을 독립적으로 검증합니다.

5. 캡슐화를 통한 보안 강화 🔒

특정 객체를 생성하면 복잡한 동작과 제약 조건을 캡슐화하여 코드를 더욱 견고하고 관리하기 쉽게 만들 수 있습니다. 최소 및 최대 구매 가격과 같은 비즈니스 규칙을 적용하는LottoPurchasePrice 클래스를 예로 들어보겠습니다.

public class LottoPurchasePrice {
    private final double price;
    private static final double MIN_PRICE = 1.0;
    private static final double MAX_PRICE = 100.0;

    public LottoPurchasePrice(double price) {
        if (price < MIN_PRICE || price > MAX_PRICE) {
            throw new IllegalArgumentException("가격은 " + MIN_PRICE + " 과 " + MAX_PRICE 사이여야 합니다");
        }
        this.price = price;
    }

    public double getPrice() {
        가격을 반환합니다;
    }
}

이 클래스를 사용하면 모든 LottoPurchasePrice 인스턴스가 지정된 제약 조건을 준수하여 애플리케이션 전체에서 데이터 무결성을 개선하고 유효성 검사 로직을 간소화할 수 있습니다.

👍 결론

Java에서 기본 데이터 유형 대신 객체를 사용하면 향상된 가독성 및 유지 관리성, 유연성 및 확장성, 재사용성, 향상된 테스트 가능성 등 다양한 이점을 얻을 수 있습니다. 객체 내의 데이터와 동작을 캡슐화함으로써 변화하는 요구 사항에 쉽게 적응하고 애플리케이션 전체에서 효과적으로 테스트하고 재사용할 수 있는 이해하기 쉽고 강력한 모듈식 코드를 생성할 수 있습니다.




단어 정리 🌈

컨텍스트

특정 코드가 실행되거나 함수가 호출(사용)되는 상태 및 환경을 의미합니다.

profile
소프트웨어 관련 고민을 좋아하고 상황에 맞는 답을 함께 찾아가는 과정을 좋아합니다. 😀

0개의 댓글