티스토리 뷰

절차지향과 객체지향

프로그래밍 패러다임의 진화 과정에서 애플리케이션이 점점 커지면서 그 코드가 복잡하고 이해하기 힘들며 변경에 불리했던 절차지향 프로그래밍에 단점을 해결하고자 객체지향 프로그래밍이 탄생하였다. 두 패러다임은 다양한 차이가 존재 하지만 이 글은 캡슐화와 정보은닉 내용을 중심으로  살펴본다.

 

 

절차지향 프로그래밍 방식의 단점

1. 데이터와 그 프로세스가 흩어져 있어 데이터 구조 변경이 생겼을 때 흩어져 있는 프로세스들을 찾아 수정하기 힘들다.
2. 데이터를 다양한 프로세스들에서 쉽게 참조할 수 있다보니 데이터 구조 변경시 수정 해야할 프로세스가 너무 많았다는 단점있다.

 

위와 같은 절자치향 패러다임의 단점을 캡슐화와 정보은닉을 통해 해결하였다.

 

캡슐화

캡슐화는 데이터와 그 로직(method)를 클래스 라고 불리는 틀 안에 응집시키는 것을 의미하는데, 이렇게 데이터와 프로세스를 응집시켜 데이터 구조 변경이 생겼을 때 그 사이드 이펙트가 미치는 최소화한다. 
public class Campaign {
  String title;
  LocalDateTime startDate;
  LocalDateTime endDate;

  public Campaign(String title, LocalDateTime startDate, LocalDateTime endDate) {
    this.title = title;
    this.startDate = startDate;
    this.endDate = endDate;
  }

  public int getRemainingDays() {
    return Period.between(startDate.toLocalDate(), endDate.toLocalDate()).getDays();
  }
}

정보은닉

정보은닉은 객체 내부에 데이터를 외부에서 접근할 수 없게하여 이곳 저곳에서 데이터에 접근할 수 없도록 하는 것을 의미한다. 자바에서는 private 과 같은 접근 제어자를 통해 데이터의 접근을 제어한다.
public class Campaign {
  private String title;
  private LocalDateTime startDate;
  private LocalDateTime endDate;

  public Campaign(String title, LocalDateTime startDate, LocalDateTime endDate) {
    this.title = title;
    this.startDate = startDate;
    this.endDate = endDate;
  }

  public int getRemainingDays() {
    return Period.between(startDate.toLocalDate(), endDate.toLocalDate()).getDays();
  }
}

캡슐화와 정보은닉

캡슐화와 정보은닉을 통해 데이터와 그 데이터를 제어하는 프로세스를 객체에 묶고 외부에서의 접근을 제한하여 데이터 변경에 대한 책임을 해당 객체에게만 맡겨 변경에 유연한 코드작성을 돕는다.

댓글