[객체지향 언어(클래스와 객체)]
1. 객체지향 언어
- 기본 개념은 '실제 세계는 사물(객체)로 이루어져 있으며 발생하는 모든 사건들은 사물간의 상호작용이다'라는 것이다.
- 실제 사물의 속성과 기능을 분석한 다음 데이터(변수)와 함수로 정의함으로써 실제 세계를 컴퓨터 속에 옮겨 놓은 것과 같다.
- 객체지향 언어의 특징
① 코드의 재 사용성이 높다.
- 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.
② 코드의 관리가 용이하다.
- 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.
③ 신뢰성이 높은 프로그래밍을 가능하게 한다.
- 제어자와 메소드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며,
코드의 중복을 제거하여 코드의 불일치로 인한 오작동을 방지할 수 있다.
2. 클래스와 객체
2-1) 클래스와 객체의 정의와 용도
- 클래스란 객체를 정의해 놓은 것이며 클래스는 객체를 생성하는데 사용된다.
- 객체의 사전적인 정의는 실제로 존재하는 것이다.
- 객체지향이론에서는 사물과 같은 유형적인 것뿐만 아니라 개념이나 논리와 같은 무형적인 것들도 객체로 간주한다.
클래스 | 객체 |
제품설계도 | 제품 |
Tv설계도 | Tv |
붕어빵기계 | 붕어빵 |
2-2) 객체와 인스턴스
- 클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화라고 하며,
어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스(instance)라고 한다.
Tv는 Tv클래스의 인스턴스이다.
Tv는 객체이다. (엄격히 구분할 필요는 없다.)
2-3) 객체의 구성요소 - 속성과 기능
- 객체는 속성과 기능, 두 종류의 구성요소로 이루어져 있으며 일반적으로 객체는 다수의 속성과 다수의 기능을 갖는다. 즉, 속성은 기능의 집합이라고 할 수 있다.
- 객체가 가지고 있는 속성과 기능을 그 객체의 멤버(member)라고 한다.
- 클래스는 객체를 정의한 것이므로 클래스로부터 객체를 생성하면 정의된 속성과 기능을 가진 객체가 만들어지는 것이다.
* 속성(property), 멤버 변수(member variable), 특성(attribute), 필드(field), 상태(state)
* 기능(function), 메소드(method), 함수(function), 행위(behavior)
2-4) 인스턴스의 생성과 사용
- 클래스로부터 인스턴스를 생성하는 방법은 아래와 같이 여러가지가 있다.
클래스 변수명; // 클래스의 객체를 참조하기 위한 참조변수 선언
변수명 = new 클래스명(); // 클래스의 객체를 생성한 후, 객체의 주소를 참조변수에 저장
Tv t;
t = new Tv();
- 인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야 한다.
- 같은 클래스로부터 생성되었을지라도 각 인스턴스는 서로 독립적이다.

2-5) 객체배열 (실습)
- 객체 역시 배열로 다루는 것이 가능하며 이를 '객체 배열'이라고 한다.

2-6) 클래스의 또 다른 정의
① 클래스 - 데이터와 함수의 결합
변수 -> 배열 -> 구조체 -> 클래스
② 클래스 - 사용자 정의 타입 (user-defined type)
- 프로그래밍언어에서 제공하는 자료형 외에 프로그래머가 서로 관련된 변수들을
묶어서 하나의 타입으로 새로 추가하는 것을 사용자정의타입이라 한다.
[변수와 메소드]
1. 변수와 메소드
1-1) 선언 위치에 따른 변수의 종류
- 변수는 클래스 변수, 인스턴스변수, 지역변수 총 세가지가 있다.
- 변수의 종류를 결정짓는 중요한 요소는 '변수의 선언된 위치'이므로 변수의 종류를 파악하기 위해서는
변수가 어느 영역에 선언되었는지를 확인하는 것이 중요하다.
- 멤버변수를 제외한 나머지 변수들은 모두 지역변수이므로 멤버변수 중 static붙은 것은 클래스변수,
붙지 않은 것이 인스턴스 변수이다.
변수의 종류 | 선언 위치 | 생성시기 |
클래스변수 | 클래스 영역 | 클래스가 메모리에 올라갔을 떄 |
인스턴스 변수 | 클래스 영역 | 인스턴스가 생성되었을 때 |
지역변수 | 클래스 영역 이외의 영역 (메소드,생성자,초기화블록 내부) |
변수 선언문이 수행되었을 때 |
① 인스턴스 변수(instance variable)
- 클래스 영역에 선언되며 클래스의 인스턴스를 생성할 때 만들어진다.
- 인스턴스 변수의 값을 읽어 오거나 저장하기 위해서는 먼저 인스턴스를 생성해야 한다.
② 클래스 변수(class variable)
- 클래스 변수를 선언하는 방법은 인스턴스 변수 앞에 static을 붙이기만 하면 된다.
- 클래스 변수는 모든 인스턴스가 공통된 저장공간 (변수)을 공유하게 된다.
- 클래스 변수는 인스턴스 변수와 달리 인스턴스를 생성하지 않고도 언제라도 바로 사용할 수 있는 특징이 있으며
'클래스이름.클래스변수'와 같은 형식으로 사용된다.
③ 지역 변수(local variable)
- 메소드 내에 선언되어 메소드 내에서만 사용가능하며 메소드가 종료되면 소멸되어 사용할 수 없게 된다.
- for문 또는 while문의 블록 내에 선언된 지역변수가 선언된 블록{} 내에서만 사용 가능하며
블록을 벗어나면 소멸되어 사용할 수 없게 된다.
* 인스턴스 변수는 인스턴스가 생성될 때마다 생성되므로 인스턴스마다 각기 다른 값을 유지할 수 있지만,
클래스 변수는 모든 인스턴스가 하나의 저장공간을 공유하므로 항상 공통된 값을 가진다.
