클래스
'클래스(class)'란 "객체를 정의해놓은 것" 또는 "객체의 설계도 또는 틀" 이라고 정의할 수 있다.
즉 클래스는 객체를 생성하는데 사용되며, 객체는 클래스에 정의된 대로 생성된다.
객체
객체의 사전적 정의는, '실제로 존재하는 것' 이다. 주변에서 볼 수 있는 사물들을 곧 객체라고 할 수 있다.
객체지향이론에서는 사물과 같은 유형적인 것 뿐만 아니라, 개념이나 논리와 같은 무형적인 것들도 객체로 간주한다.
프로그래밍에서의 객체는 클래스에 정의된 내용대로 메모리에 생성된 것을 뜻한다.
클래스와 객체 관계
우리의 실생활에서 두 관계를 예를 들면, 제품 설계도(클래스)와 제품(객체)과의 관계라고 할 수 있다.
클래스는 단지 객체를 생성하는데 사용될 뿐, 객체 그 자체는 아니다. 원하는 기능의 객체를 사용하기 위해서는 먼저 클래스로부터 객체를 생성하는 과정이 선행되어야 한다.
클래스를 정의하고 클래스를 통해 객체를 생성하는 이유는 설계도를 통해서 제품을 만드는 이유와 같다. 하나의 설계도만 잘 만들어 놓으면 제품을 만들거나 공정 관리 또한 편해진다. 여기서 객체지향의 특성을 볼 수 있다.
객체와 인스턴스
클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화(instantiate)라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스(instance)라고 한다.
인스턴스는 객체와 같은 의미지만, 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖고 있으며, 인스턴스는 어떤 클래스로부터 만들어진 것인지를 강조하는 보다 구체적인 의미를 갖고 있다.
인스턴스와 객체는 같은 의미이기에 두 용어의 사용을 엄격히 구분할 필요는 없지만, 문맥에 따라 구별하여 사용하는 것이 바람직하다.
인스턴스의 생성과 사용
클래스명 참조변수명 = new 클래스명();
위와 같이 인스턴스를 생성할 수 있는데, 이를 좀 더 자세히 살펴보면,
클래스 타입의 참조변수를 선언으로 메모리에 참조변수를 위한 공간이 마련되고,
생성 연산자 new에 인해 클래스의 인스턴스가 메모리의 빈 공간에 생성된다. 이 때 클래스의 멤버변수는 각 자료형의 기본값으로 초기화 된다.
클래스명( )은 생성자로 볼 수 있다.
마지막으로 대입연산자 =에 의해서 생성된 객체의 주소값이 참조변수에 저장된다.
이 과정을 통해 인스턴스가 생성이 되고
참조변수명.멤버변수
참조변수명.멤버함수()
위와 같은 형식으로 인스턴스의 멤버들에게 접근하여 사용할 수 있다.
클래스 변수는 참조변수 라는 것을 잊지 말자!
객체 배열
객체 역시 배열로 다루는 것이 가능하며, 이를 '객체 배열'이라고 한다.
객체 배열 안에 객체가 저장되는 것은 아니고, 객체의 주소가 저장된다. 객체 배열은 참조변수들을 하나로 묶은 참조 변수 배열과 마찬가지인 것이다.
객체 배열을 생성하면 각 요소는 참조변수의 기본값인 null로 초기화 된다. 이는 그저 객체를 다루기 위한 참조변수들이 만들어진 것일 뿐, 아직 객체가 생성되지 않았기때문에 객체를 생성해서 객체 배열의 각 요소에 저장하는 것을 잊으면 안된다.
배열의 초기화 블럭을 사용하거나 생성해야 할 객체의 수가 많을때는 반복문을 사용할 수 있다.
'Java > 객체지향프로그래밍' 카테고리의 다른 글
[Java] 상속(Inheritance) - 코딩밥상 (0) | 2023.02.08 |
---|---|
[Java] 초기화 블럭(initialization block) - 코딩밥상 (0) | 2023.02.07 |
[Java] 생성자(Constructor) - 코딩밥상 (0) | 2023.02.07 |
[Java] 오버로딩(overloading) - 코딩밥상 (0) | 2023.02.07 |
[Java] JVM의 메모리 구조와 클래스 멤버 - 코딩밥상 (0) | 2023.02.07 |