6) 객체지향 프로그래밍1 - 객체와 클래스

dev-mage·2022년 9월 26일
0

Hello Java World!

목록 보기
11/32
post-thumbnail

객체지향 언어와 Java의 객체, 클래스, 인스턴스

https://www.educative.io/blog/object-oriented-programming

객체지향 언어

자바는 객체지향 프로그래밍 언어(Object-Oriented Programming Language)이다. 객체지향 언어는 현실 세계의 시스템을 객체의 관점에서 프로그래밍하는 것이다. 기존의 프로그래밍 언어에 몇 가지 새로운 규칙을 추가한 보다 발전된 형태의 프로그래밍 언어로 이러한 규칙들을 이용해서 코드 간에 서로 관계를 맺어 보다 유기적으로 프로그램을 구성하는 것이 가능해졌다. 객체지향 언어의 가장 큰 장점은 코드의 재사용성이 높고 유지보수가 용이하다는 점이다.

객체

그렇다면 객체(Object)란 과연 무엇일까? Object의 사전적 의미는 보고 만질 수 있는 사물을 의미한다. 객체지향 프로그래밍 언어에서는 우리가 살고 있는 현실 세계에 존재하는 모든 것을 프로그램 상에서 객체(Object)로 표현하기로 한 것이다. 현실 세계의 객체들은 두 가지의 공통된 특성인 속성과 기능을 갖는다. 이런 연관된 속성과 기능을 소프트웨어적으로 묶은 것이 바로 객체지향 프로그래밍에서의 객체이며 속성과 기능을 각각 변수와 메서드로 표현한다. 그리고 변수와 메서드는 그 객체의 구성원(멤버)이 된다.

클래스

클래스는 객체의 설계도 또는 프로토타입이라고 할 수 있다. 클래스를 사용하여 객체를 생성하며 객체는 클래스에 정의된 대로 생성된다. TV를 제작하기 위해서는 TV 설계도가 필요한 것처럼 클래스와 객체는 제품 설계도와 제품과의 관계라고 할 수 있다. 이렇게 클래스를 정의하고 클래스를 통해 객체를 생성하는 이유는 설계도를 통해서 제품을 만드는 이유와 같다. 하나의 설계도만 잘 만들어 놓으면 제품을 만드는 일이 쉬워지기 때문이다.

다음은 현실 세계의 객체를 클래스로 만들어 보는 과정이다.

인스턴스

클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화(instantiate)라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스(instance)라고 한다. 인스턴스와 객체는 같은 의미이지만, 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖고 있으며, 인스턴스는 어떤 클래스로부터 만들어진 것인지를 보다 강조하는 의미를 갖고 있다.

클래스 → 인스턴스화 → 인스턴스(객체)

예를 들면, ‘TV는 인스턴스다.’라고 하기 보다는 ‘TV는 객체다.’라는 쪽이, ‘TV는 TV 클래스의 객체이다.’라고 하기 보다는 ‘TV는 TV 클래스의 인스턴스다.’라고 하는 것이 더 자연스럽다.

객체의 생성과 사용

TV 클래스를 선언한 것은 TV 설계도를 작성한 것에 불과하므로, TV 인스턴스를 생성해야 제품을 사용할 수 있다. 일반적으로 클래스로부터 인스턴스를 생성하고 사용하는 방법은 다음과 같다.

클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수 선언
변수명 = new 클래스명(); // 클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장
변수명.멤버변수 ... ; // 객체의 속성(멤버변수)를 사용

Tv t;
t = new Tv();
t.channel = 7;

선언 위치에 따른 변수의 종류

위에서 언급했듯이 객체는 변수와 메서드를 가진다. 변수는 어디에 선언되었는지에 따라 3종류로 나뉘는데 다음과 같다.

... { // 클래스 영역
		int iv; // 인스턴스 변수
		static int cv; // 클래스 변수 / static 변수 / 공유 변수

		void method() { // 메서드 영역
				int lv = 0; // 지역변수
		}
}
종류선언 위치생성 시기
인스턴스 변수(instance variable)클래스 영역인스턴스가 생성되었을 때
클래스 변수(class variable)클래스 영역클래스가 메모리에 올라갈 때
지역 변수(lacal variable)클래스 영역 이외의 영역
(메서드, 생성자, 초기화 블럭 내부)변수 선언문이 수행되었을 때
  1. 인스턴스 변수
    • 클래스 영역에 선언되며 인스턴스를 생성할 때 만들어짐
    • 인스턴스를 생성해야 변수의 값을 읽어 오거나 저장할 수 있음
    • 별도의 저장공간을 가지므로 서로 다른 값을 가질 수 있음
    • 인스턴스마다 고유한 상태를 유지해야하는 속성의 경우에 사용
  2. 클래스 변수
    • 인스턴스 변수 앞에 static을 붙이면 클래스 변수가 됨
    • 인스턴스를 생성하지 않고 언제라도 바로 클래스 이름. 클래스 변수와 같이 사용할 수 있음
    • 인스턴스 변수와는 달리 모든 인스턴스가 공통된 저장공간(변수)을 공유하게 됨
    • 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하는 속성의 경우에 사용
  3. 지역 변수
    • 메서드 내에 선언되어 메서드 내에서만 사용 가능
    • 메서드가 종료되면 소멸되어 사용할 수 없음

References

0개의 댓글