foxpacking

Programming Lessons

Java 언어 Korean

Java 총 정리[51. 객체 심화]

객체 심화

객체심화사진

이전 걸음을 통해서 has문제까지 풀어보면서 has에 대해서 이해를 하셨을 것이라고 생각을 합니다. 

has라는 것이 결국 class로 설계를 한 것을 객체를 만들고 그것을 다른 class에 참조 자료형 변수로 만들어 사용을 하게 되는 객체에 대한 이야기입니다. 

그럼 여기서 객체를 조금 더 자세히 이야기를 하면 좋을 것 같습니다 .  그래서 이번에는 객체를 자세히 해보겠습니다.

객체를 생성을 하는 것이 이전에서 계속 배운 과연 main 메소드에서만 가능 할까요? 당연히 이렇게 획일적이지 않을 것이라고 여러분들도 생각을 하실 것입니다.  

당연히 객체는 여러 곳에서 만들어 질 수가 있습니다. 그리고 그것을 사용하거나 다른 참조 자료형 변수에 저장도 해야 합니다. 이런 여러가지 부분을 이번 글을 통해서 설명을 드리도록 하겠습니다. 

객체는 main 메소드에서 생성을 하는 것을 많이 봤습니다. 

하지만 이것은 일부이고 class 안에 있는 메소드에서 객체를 생성을 할 수도 있고 또한 class에서 참조 자료형 선언을 할 때 객체를 생성을 할 수도 있고 아니면 마지막으로 생성자에서 객체를 생성을 할 수 있습니다. 

이번에는 메소드에서 생성해서 객체를 움직이면서 여러가지 질문을 통해서 이해를 하도록 해보겠습니다.

객체 심화 메소드 생성

객체심화소스

위에 소스를 보면 class A에서 메소드 makeB에서 class B 객체를 생성하고 본인 멤버변수 B b에 대입을 하고 그대로 return을 하여서 메소드를 호출을 한 곳에 객체를 사용을 할 수 있게 해줍니다. 

그리고 class B는 정수 변수 k를 하나 가지고 있습니다.

A a = new A() 이 부분을 main 메소드로 생각을 하시면 됩니다.

그럼 A객체를 생성하고 그 객체를 이용해서 B객체를 생성한 것을 그대로 B b 변수에 대입을 해줬습니다. 

이때 class A안에 있는 b 변수와 메소드를 호출해서 값을 받은 main 메소드에 있는 b변수 같은 객체를 가지고 있는 것일 까요?

이것이 대해서 생각을 해보셔야 합니다.

그리고 또 makeB 메소드가 호출 된다면 b1변수와 main 메소드에 있는 b변수는 같은 B객체 인지 그리고 class A에 안에 있는 b변수와 같은지?

이런 것을 생각을 해야 객체에 대한 이해를 정확히 할 수 있습니다.

객체 심화 메소드 이해

객체심화이해사진

이 위의 그림을 보고 이해를 하시면 도움이 될 수 있습니다.

우선 객체를 생성했지만 그 객체를 main에 있는 b와 본인 멤버 변수 b와 동일하게 사용이 되게 구현이 되어 있습니다.

그 기준으로 위의 문제를 풀어 보겠습니다.

b1.k의 정답은 30입니다.

b.k의 정답은 20 입니다.

a.b.k의 정답은 30입니다.

위 정답이 나오는 이유는 처음 a.makeB()를 호출하면 B의 객체는 class A의 멤버 변수 b와 main메소드에 있는 b와 똑같은 객체를 바라보게 됩니다.

하지만 그 다음에 다시 makeB()가 호출되면 b1과 class A 멤버 변수 b가 같은 객체를 바라보게 됩니다. 그래서 위와 같은 결과가 나오게 됩니다.

Dolphin

About Author

Leave a comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You may also like

Korean Programming 기초

IT 개발자 VS 프로축구선수 비교?

IT 개발자와 프로축구선수의 같은 점과 다른 점? 프로그래밍 공부를 하시면서 개발자로 취업을 하려고 하는데 과연 취업을 할 수 있을까? IT
Korean 클라우드

AWS 로그인 불가능, AWS고객 센터 이메일 문의 결과는?

AWS 고객센터 이메일 문의 솔직후기 AWS를 사용하기 위해 로그인을 하는 경우 이메일로 코드 번호를 보내지만 이메일로 받을 수 없는 상황이거나