JAVA
[OOP] 객체지향언어, 클래스와 객체
ewok
2023. 2. 28. 23:09
객체지향언어
객체지향이론의 기본 개념
실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물 간의 상호작용이다.
실제 사물의 속성과 기능을 분석한 다음, 데이터(변수)와 함수로 정의함으로써 실제 세계를 컴퓨터 속으로 옮기는 것이다.
객체지향 언어의 특징
- 코드의 재사용성이 높다.
- 코드의 관리가 용이하다.
- 신뢰성이 높은 프로그래밍을 가능하게 한다.
클래스와 객체
클래스
- 객체를 정의해 놓은 것
- 객체의 설계도 혹은 틀
객체
- 실제로 존재하는 것
유형 뿐만 아니라 무형적인 것도 해당되기 때문에 사물은 물론 개념이나 논리 등도 객체에 해당된다.
클래스 | 객체 |
제품 설계도 | 제품 |
TV 설계도 | TV |
붕어빵 기계 | 붕어빵 |
클래스는 객체를 만들기 위해 사용한다.
객체와 인스턴스
클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화라고 하고
클래스로부터 만들어진 객체를 인스턴스라고 한다.
객체의 구성요소
객체는 속성과 기능, 두 종류의 구성요소로 이루어져 있다.
속성과 기능은 아래와 같이 다양한 용어로 표현된다.
속성(property) 멤버변수, 특성, 필드, 상태
기능(function) 메서드, 함수, 행위
클래스에는 객체의 모든 속성과 기능이 정의되어 있다.
인스턴스의 생성 및 사용
클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수를 선언
변수명 = new 클래스명(); //클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장
Tv t; // Tv 클래스 타입의 참조변수 t를 선언
t = new Tv(); // Tv 인스턴스를 생성한 후, 생성된 Tv 인스턴스의 주소를 t에 저장
class Tv {
// Tv의 속성(멤버변수)
String color; // 색상
boolean power; // 전원상태(on/off)
int channel; // 채널
// Tv의 기능(메서드)
void power() { power = !power; } // TV를 켜거나 끄는 기능을 하는 메서드
void channelUp() { ++channel; } // TV의 채널을 높이는 기능을 하는 메서드
void channelDown() { --channel; } // TV의 채널을 낮추는 기능을 하는 메서드
}
class TvTest {
public static void main(String args[]) {
Tv t; // Tv인스턴스를 참조하기 위한 변수 t를 선언
t = new Tv(); // Tv인스턴스를 생성한다.
t.channel = 7; // Tv인스턴스의 멤버변수 channel의 값을 7로 한다.
t.channelDown(); // Tv인스턴스의 메서드 channelDown()을 호출한다.
System.out.println("현재 채널은 " + t.channel + " 입니다.");
}
}
인스턴스는 참조변수를 통해서만 다룰 수 있고, 참조변수의 타입은 인스턴스의 타입과 일치해야 한다.
객체 배열
객체도 배열로 다루는 것이 가능하다. 객체 배열 안에는 객체가 저장되는 것이 아니라 객체의 주소가 저장된다.
Tv[] tvArr = new Tv[3]; //참조변수 배열을 생성
// 객체를 생성해서 배열에 저장
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
// 한 줄로 간단히
Tv[] tvArr = {new Tv(), new Tv(), new Tv()};
// 객체 수가 많을경우
Tv[] tvArr = new Tv[100];
for(int i=0; i<tvArr.length; i++) {
tvArr[i] = new Tv();
}