[JAVA] 7.클래스와 객체

안녕하세요 IT뽀로로입니다.

 

오늘은 클래스와 객체에 대하여 알아보도록 할게요.

 

#클래스(Class)란?

 

클래스는 객체를 생성하기 위한 설계도 또는 툴

 

#객체(Object)란?

 

설계도 또는 틀로 찍어낸 실체,

또는 소프트웨어에 구현될 대상,

클래스에 선언된 모양 그대로 생성된 실체,

클래스의 인스턴스

 

객체를 정의하기엔 이 정도가 되겠네요

 

#인스턴스(Instance)란?

 

설계도를 바탕으로 소프트웨어에 구현된 구체적인 실체

객체를 소프트웨어에 실체화하면 인스턴스라고 한다.

실체화된 인 스터 스는 메모리에 할당된다.

한 가지 집고 넘어가자면 객체와 인스턴스의 차이는 꼭 알고 가시길 바랄게요!

 

쉽게 말하면 객체에 대한 레퍼런스 변수를 객체라 보면 되고 new 키워드를 통해서 메모리에 할당했을 때를

 

인스턴스라고 보시면 됩니다.

 

#클래스의 구성

 

 

클래스의 구성을 코드로 확 나타내 봤습니다.

 

먼저 클래스의 접근권한 같은 경우는 3가지가 있습니다.

 

 

public : 클래스 내부/외부에서 모두 호출 가능

 

private : 클래스 내부 멤버들만 호출 가능

 

protected : 클래스 내부 메서드들은 호출 가능하며, 다른 클래스 중 상속받은 서브클래스만 호출 가능

 

 

그리고 전 글에서 언급했다시피 클래스는 필드와 메서드로 구성된다고 했죠? 

 

또 이러한 접근권한자를 지정하는 것은 객체지향 언어의 특징 중 하나인 캡슐화 때문이겠죠? 

 

클래스 구성은 이게 끝입니다!!

 

 

#객체 생성과 레퍼런스

 

먼저 객체 생성 순서입니다.

 

예를 들어 Person이라는 클래스를 만들었을 경우입니다.

 

1)  Person 클래스의 레퍼런스 변수 선언

 

           Person aperson;

 

=> 이 선언문으로 객체가 생성되지 않음,

     그 이유는 aperson은 Person타입의 객체에 대한 레퍼런스를 가지는 변수의 선언일뿐이다.

 

** C++에서는 Person aperson;으로 하면 aperson은 객체가 된다. 

 

2) 객체 생성 (new 연산자 이용)

 

          aperson = new Person("뽀로로");

 

=> new 연산자에 의해 Person 타입의 객체 메모리 공간이 확보된다.

 

위 그림에서 처럼 aperson은 Person 타입의 레퍼런스를 담는 변수를 선언한 거고

 

new 연산자를 이용해 인스턴스를 생성해 실체화한 거겠죠?

 

 

#객체 배열

 

객체 배열은 객체가 원소인 객체 배열을 말합니다. 

 

즉, 객체에 대한 레퍼런스를 원소로 갖는 배열이다.

 

생성은 위 과정과 같은데 중간에 배열의 공간이 껴드는 게 다릅니다.

 

예를 들어보죠 

 

1) 레퍼런스 변수 선언

 

        Person [] pa;

 

 

2) 레퍼런스 배열 생성

 

        pa = new Person [10]

 

 

여기까지 메모리 그림을 보시면 이렇게 됩니다.

 

이제 각각의 배열마다 객체를 인스턴스화 시켜주면 됩니다.

 

 

3) 원소마다 인스턴스화

 

for(int i = 0; i < pa.length; i++){

    pa [i] = new Person("뽀로로");

}

 

 

 

밑에 그림은 총과정의 그림입니다.

 

 

사실상 객체와 객체 배열이나 이런 개념들은 메모리를 손으로 그려가면서 이해하면 정말 이해가 쉽습니다.

 

오늘은 여기까지 학습한 내용을 정리하도록 하겠습니다

 

고생하셨습니다!

 

References. 명품 Java Programming

'IT Study > JAVA' 카테고리의 다른 글

[JAVA] 9.메소드 오버로딩(Method Overloading)  (0) 2019.09.02
[JAVA] 8.인자전달 (Call-by-value)  (0) 2019.09.02
[JAVA] 6.객체지향 언어의 특성  (0) 2019.08.31
[JAVA] 연습문제  (0) 2019.08.30
[JAVA] 5.JAVA의 예외처리  (0) 2019.08.30