Home 객체와 캡슐화
Post
Cancel

객체와 캡슐화

들어가기 전, 조각 지식

- 객체(사전적 의미)

: 객체는 변수, 데이터 구조, 함수, 메서드가 될 수 있으며 식별자가 참조하는 메모리의 값이다. 그리고 객체는 클래스를 기반으로 생성된다.

- 의존한다.

: A클래스가 실행하는 것에 있어서 B클래스의 메소드가 필요하다 -> A는 B에 의존한다.

1
2
3
4
5
6
7
8
class A {
	public int head() {...}
}

class B {
	public int face(head h) {...}
	public A face() {...}
}

위에서 class A 는 class B의 존재도 모르고 B가 바뀐다고 하여도, 변경사항이 없다. class B는 class A가 변경될경우, 로직이 변경되어야 한다 -> class B가 A를 의존하고 있다.


객체란

: 어떤 기능을 제공하는가? 기능을 제공하는 단위.(사용하는 입장에서)

그렇기에, 메소드(메소드명, parameter, return 값)를 이용해서 기능을 명세한다.

즉, 기능을 사용한다 == 메소드를 호출한다.

기능을 호출하면서 객체들이 엮인다. 메세지: 객체 간의 상호 작용

아래와 같이 기능이 없고 단순히 getter,setter만 있으면 data class 라고 칭한다.

1
2
3
4
5
6
@Getter
@Setter
public class Student {
    private Long id;
    private String name;
}

캡슐화(정보 은닉)

: class에 주요한 로직을 넣어서 외부로부터 은닉한다. -> 외부의 영향 없이 내부 구현을 변경하기 위해서

  • 변화에 따라 로직을 변경해야하는 상황이 발생한다.
  • 캡슐화를 하는 과정에서 기능에 대한 이해가 커짐(기능에 대해 이해해야 기능을 캡슐화할수있음)
  • 캡슐화를 잘하면 수정사항으로 인한 연쇄적인 수정을 최소화할 수 있다. (한 군데 수정만으로)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Getter
@Setter
public class Student {
    private Long id;
    private String name;

    /**
    * 학생인지 판단하는 로직
    */
    public boolean isStudent() {
        if (this.student == student) {
            return true;
        }
        return false;
    }
 }
  • 규칙 1) data를 가지고 와서 하는게 아니라, 메소드로 감싸기
  • 규칙 2) 여러 메소드를 연속해서 나열하지 않고 특정메소드 하나로 캡슐화한다.
    • 메소드에서 생성한 객체의 메소드만 호출
    • 파라미터로 받은 객체의 메소드만 호출
    • 필드로 참조하는 객체의 메소드만 호출
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 규칙1
public String findAdult() {
	if(member.getAge() > 20) {
		return adult;
	} else {
		return student;
	}
}

// 상단의 조건문을 아래와 같이 캡슐화 
public String findAdult() {
	if(AdultOrNot()) {
		return adult;
	} else {
		return student;
	}
}

//member class 안에서 구현
public Boolean AdultOrNot() {
	if (member.getAge > 20) {
		return true; 
	}
	return false;
}

1
2
3
4
5
6
// 규칙2 Demeter’s Law
Date birth = member.getBirthDate();
birth.isAfter(now);
member.getBirthDate().isAfter(now) 

-> member.isPassed(now) // 위의 메소드를 isPassed로 캡술화한다.

출처: 최범균, “객체 지향 프로그래밍 입문”, 인프런

This post is licensed under CC BY 4.0 by the author.

-

Null Check