현재 버전

1. 객체의 캡슐화는 간단히 말해서 외부에서 마음대로 접근못하게 감싸는것을 말합니다.

point 클래스를 예로 들면 point 클래스의 멤버변수인 xPos와 yPos를 point라는 클래스로 감싸고 

이 두 멤버변수에 private를 선언하여, 외부에서 이 변수에 마음대로 값을 수정하지못하게하고,

필요한 메서드들을 public으로 만들어 내가 만들어놓은 메서드를 통해서만 멤버변수를 조작할수있게 하는것입니다. 

질문하신게 어떻게 멤버변수로 다른클래스가 선언되냐 물으시는것같은데, 이건 캡슐화랑 관계없는것 같구요, 멤버변수로는 기본타입이든 레퍼런스타입이든 전부 선언할 수 있습니다.


사람에게 팔다리도 있지만, 모자도 쓸 수 있고, 옷도 입을 수 있는거랑 비슷한거죠.

사람이라는 객체에 멤버변수로 팔,다리,모자,옷 이런게 다 가능하다는거죠.



2.Point point = new Point(x, y); 과 this.point = new Point(x, y); 의 차이는

전자는 새로운 point객체를 하나 만드는것이고 후자는 TestCircle 에 선언되어 있는 point객체에 값을 초기

화시켜준다는것이죠.

Point point = new Point(x, y);로 선언해서 값을 받으려하니 showCircleInfo() 메소드에서는 point가

없는 것 처럼 취급이 되더라구요


라고 하시는데, 새로 선언한 point와 TestCircle 에 있는 point는 완전 다른 객체입니다.

showCircleInfo() 에서는 TestCircle 에 있는 point를 통해서 메서드를 실행하려고 하는데

point는 지금 선언만 되었다 뿐이지 어느곳에서도 초기화를 해주지 않으니까, 당연히 값이 없죠.


하지만 this.point = new Point(x, y); 이렇게 한다면 TestCircle 선언되어 있는 point객체에 값을 초기화 시켜준게되고, showCircleInfo()이 값도 정상적으로 잘찍히겟죠


더 쉬운 예로


내가 point라는 이름의 주머니를 하나 가지고 있다고 한다면

전자는 내가 가지고 있는 주머니에 구슬을 넣는것이고, 후자는 새로운 point주머니를 만들어서

그 주머니에 구슬을 넣는것입니다.

그러면 같은 point라는 이름의 주머니라도 전자는 내 주머니에 구슬이 있고, 후자는 없겠죠?


수정 이력

2020-10-26 13:36:10 에 아래 내용에서 변경 됨 #1

1. 객체의 캡슐화는 간단히 말해서 외부에서 마음대로 접근못하게 감싸는것을 말합니다.

point 클래스를 예로 들면 point 클래스의 멤버변수인 xPos와 yPos를 point라는 클래스로 감싸고 

이 두 멤버변수에 private를 선언하여, 외부에서 이 변수에 마음대로 값을 수정하지못하게하고,

필요한 메서드들을 public으로 만들어 내가 만들어놓은 메서드를 통해서만 멤버변수를 조작할수있게 하는것입니다. 

질문하신게 어떻게 멤버변수로 다른클래스가 선언되냐 물으시는것같은데, 이건 캡슐화랑 관계없는것 같구요, 멤버변수로는 기본타입이든 레퍼런스타입이든 전부 선언할 수 있습니다.


2.Point point = new Point(x, y); 과 this.point = new Point(x, y); 의 차이는

전자는 새로운 point객체를 하나 만드는것이고 후자는 TestCircle 에 선언되어 있는 point객체에 값을 초기

화시켜준다는것이죠.


Point point = new Point(x, y);로 선언해서 값을 받으려하니 showCircleInfo() 메소드에서는 point가

없는 것 처럼 취급이 되더라구요


라고 하시는데, 새로 선언한 point와 TestCircle 에 있는 point는 완전 다른 객체입니다.

showCircleInfo() 에서는 TestCircle 에 있는 point를 통해서 메서드를 실행하려고 하는데

point는 지금 선언만 되었다 뿐이지 어느곳에서도 초기화를 해주지 않으니까, 당연히 값이 없죠.


하지만 this.point = new Point(x, y); 이렇게 한다면 TestCircle 선언되어 있는 point객체에 값을 초기화 시켜준게되고, showCircleInfo()이 값도 정상적으로 잘찍히겟죠