패러다임 : 한 시대의 사회 전체가 고유하는 이론이나 방법, 문제의식 등의 체계
패러다임의 전환 : 과거의 패러다임이 새로운 패러다임에 의해 대체됨으로써 정상과학의 방향과 성격이 변하는 것
프로그래밍 패러다임 : 어느 성숙한 개발자 공동체에 의해 수용된 프로그래밍 방법과 문제 해결 방법, 프로그래밍 스타일
→ 어떤 프로그래밍 패러다임을 사용하느냐에 따라 문제를 바라보는 관점과 프로그램을 작성하는 방법이 달라진다
.
public class Theater {
private TicketSeller ticketSeller;
public Theater(TicketSeller ticketSeller) {
this.ticketSeller = ticketSeller;
}
public void enter(Audience audience) {
if (audience.getBag().hasInvitation()) {
Ticket ticket = ticketSeller.getTicketOffice().getTicket();
audience.getBag().setTicket(ticket);
} else {
Ticket ticket = ticketSeller.getTicketOffice().getTicket();
audience.getBag().minusAmount(ticket.getFee());
ticketSeller.getTicketOffice().plusAmount(ticket.getFee());
audience.getBag().setTicket(ticket);
}
}
}
→ 변경에 취약하고 이해하기 어려운 코드
public class Theater {
private TicketSeller ticketSeller;
public Theater(TicketSeller ticketSeller) {
this.ticketSeller = ticketSeller;
}
public void enter(Audience audience) {
ticketSeller.sellTo(audience)
}
}
→ 인터페이스만을 공개하는 것은 결합도를 낮추고 변경하기 쉽게 한다
→ TicketSeller의 내부 구현이 캡슐화되어 있다.
→ facade 패턴이 적용되었다.
→ 응집도가 높다(밀접하게 연관된 작업만을 수행하고 연관성 없는 작업은 다른 객체에게 위임하는 객체)