애정코딩 💻

BASIC 2021.05.07 댓글 0 Joana

01. 객체 지향 프로그래밍 입문 - 객체와 캡슐화

www.inflearn.com/course/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%9E%85%EB%AC%B8

 

객체 지향 프로그래밍 입문 - 인프런 | 강의

잘 하는 개발자가 되기 위해서는 유연한 코드를 작성할 줄 알아야합니다. 객체 지향을 이용해서 변경하기 좋은 유연한 코드를 만드는 방법을 알아보세요., 객체 지향 프로그래밍 입문 이번 '객

www.inflearn.com

 

해당 강의를 보며 정리한 내용입니다!

 

 

객체의 핵심?

객체는 제공하는 기능으로 정의한다. 어떤 기능을 제공하는지로 정의하지 내부적으로 가진 필드로 정의하지 않는다.

예를들어 회원객체가 있다면 회원객체의 기능은 회원수정, 회원탈퇴 ... 등 이다!

 

그렇다면 기능은 어떻게 정의될까?

보통 메서드(오퍼레이션)을 이용해서 기능을 명세. 이름, 파라미터 , 결과로 구성되어있다.

 

그럼 어떤식으로 데이터를 주고 받을까?

기능을 사용해서 연결합니다. 기능 사용 == 메서드 호출

서로 상호 작용(메시지)을 한다. 예를들어 메서드 호출 메시지, 리턴하는 메시지, 익셉션 메시지 

 

객체는 어떻게 생긴걸까?

기능을 포함하는걸 객체라고 합니다! 

dto,vo 같은 데이터만을 포함하고 있는건 객체라고 하지는 않습니다.

제 생각에는 데이터만을 포함하고 있는 것 또한 객체라고 생각하지만... 기능을 중심으로 생각하고 강의를 들어보겠습니다,,

 

캡슐화?

- 데이터 + 데이터 관련 기능을 묶는다.

- 객체가 기능을 어떻게 구현했는지 외부에 감춘다.

- 정보 은닉 의미를 포함한다. 

 

캡슐화를 왜 하는건가?

외부에 영향 없이 객체 내부 구현을 변경하기 위함이다.

 

만약 캡슐화를 하지 않는다면 어떻게 될까?

요구상황의 변화가 생겨서 수정하게 되었을 때 데이터 구조/사용에 변화가 생기는데

해당 데이터를 사용하는 코드의 수정이 발생하게 됩니다. 해당 데이터를 사용하는 곳을 모두 수정해야 하는 번거러움

 

캡슐화를 하게 된다면!

어떤 요구 상황이 변경되었을 때 변경요소가 적다. 

Account 안에 있는 hasRefularPermission 만 변경해주면 되기 때문.

캡슐화된 기능을 사용하는 코드 영향 최소화, 기능에 대한 이해를 높인다

if(acc.hasRegularPermission()){
 ... 정회원 기능
 }
 
 
 public class Account{
 	private Membership membership;
    private Date expDate;
    
    public boolean hasRegularPermission(){
    	return membership == REGULAR && (expDate.isAfter ... 

 

캡슐화를 위한 규칙

1. 데이터를 달라고 하지말고 해달라고 하기. 예를 들어 

acc.getMembership() == REFULAR 를 보면 Account에서 멤버를 달라고 하고 그 후에 조건을 비교한다. 이렇게 하지말고

acc.hasRegularPermission() 와 같이 해당 데이터를 갖고 있는 객체에게 기능을 해달라고 지시하는 것이다.

 

2. Demeter's Law

메서드에서 생성한 객체의 메서드만 호출

파라미터로 받은 객체의 메서드만 호출

필드로 참조하는 객체의 메서드만 호출

 

연속으로 사용하는 메서드를 하나의 메서드를 호출하는 것으로 변경한다.

 

 

 

반응형