Categories: 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

Recent Posts

Java 총정리[97. Java GUI]

Java GUI Java GUI에 대해서 이번 걸음에서 배움으로써 GUI에 전반적인 지식과 Java GUI를 구현하는 방법…

7개월 ago

Java 총정리[96. Java TCP 통신 프로그램 구현]

Java TCP 통신 프로그램 구현 Java TCP 통신 프로그램 구현을 위해서 이전 걸음에서 쓰레드에 대한…

7개월 ago

Java 총정리[95.쓰레드 통신]

쓰레드 통신 이전 걸음에서 쓰레드의 임계영역에 대해서 같이 공부를 했습니다. 동기화에 대한 개념을 계속적으로 하고…

8개월 ago

Java 총 정리[94. 쓰레드 임계영역]

쓰레드 임계영역 이전 걸음에서 쓰레드의 동기화에 대해서 같이 공부를 했습니다. 동기화에 대한 전반적인 내용을 공부하고…

8개월 ago

Java 총 정리[93. 쓰레드 동기화]

쓰레드 동기화 이전 걸음에서 계속 쓰레드에 대해서 공부를 하고 있습니다. 쓰레드는 상당히 중요한 개념이기 때문에…

8개월 ago

Java 총 정리[92. 쓰레드 join()]

쓰레드 join() 이전 걸음에서 쓰레드의 전반적인 실행 흐름에 대해서 공부를 했습니다. 이제 배운 실행 흐름…

9개월 ago

This website uses cookies.