안녕하세요 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 |