자바(JAVA) - 객체 지향 언어 : 클래스와 객체
객체 지향 언어
객체 지향 언어는 기존의 프로그래밍 언어에 몇가지 새로운 규칙을 추가한 보다 발전된 형태의 것이다.
객체 지향 언어의 특징
1. 코드의 재사용성이 높다
- 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.
2. 코드의 관리가 용이하다.
- 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.
3. 신뢰성이 높은 프로그래밍을 가능하게 한다.
- 제어자와 메서드를 이용해 데이터를 보호하고 올바른 값을 유지하도록 하며,
코드의 중복을 제거해 코드의 불일치로 인한 오동작을 방지할 수 있다.
클래스와 객체
클래스의 정의 - 객체를 정의해 놓은 것
클래스의 용도 - 클래스는 객체를 생성하는데 사용된다.
객체의 정의 - 실제로 존재하는 것. ex) 사물 또는 개념
객체의 용도 - 객체가 가지고 있는 기능과 속성에 따라 다름
ex)
클래스 <-> 객체
제품 설계도 <-> 제품
TV 설계도 <-> TV
붕어빵 기계 <-> 붕어빵
객체와 인스턴스
클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화(instacntiate)라고 하며,
어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스(instance)라고 한다.
즉, 객체 = 인스턴스(instance)
클래스 ---(인스턴스화)-----> 객체
객체의 속성(property) - 멤버변수(member variable), 특성(attribute), 필드(field), 상태(state)
객체의 기능(function) - 메서드(method), 함수(function), 행위(behavior)
ex) TV를 예로 들어보자
속성 | 크기, 길이, 높이, 색상, 볼륨, 채널 등 |
기능 | 켜기, 끄기, 볼륨 높/낮추기, 채널 변경 등 |
class TV{
//변수
String color; // 색
boolean power; // 전원 상태
int channel; // 채널
//메서드
void power() { power != power}
void channelUp() { channel ++;}
void channelDown() {channel --;}
}
인스턴스의 생성과 사용
클래스명 변수명; // 클래스의 객체를 참조하기 위해 참조변수 선언
변수명 = new 클래스명(); // 클래스의 객체 생성 후, 객체의 주소를 참조변수에 저장
Tv t; //선언
t= new TV; //인스턴스 생성한 것을 t에 저장
t.channel = 7; //메모리에 channel 값이 null 이기 때문에 값을 할당해준다
t.channelDown() //메서드 사용시에는 인스턴스로 생성한 값에 . 을 찍고 사용한다
인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야한다.
객체 배열
많은 수의 객체를 다뤄야할 때, 배열로 다루면 편리하다.
객체 역시 배열로 다루는 것이 가능하며, 이를 '객체 배열'이라고 한다.
객체 배열 안에 객체가 아닌 객체의 주소가 저장된다
즉, 객체 배열은 참조 변수들을 하나로 묶은 참조 변수 배열이다.
Tv tv1, tv2, tv3; ----------------> Tv[] tvArr = new Tv[3];
객체 배열을 생성하는 것은, 그저 객체를 다루기 위한 참조 변수들이 만들어진 것일뿐, 아직 객체가 저장되지 않았다.
객체를 생성해서 객체 배열의 각 요소에 저장하는 것 잊지말자!
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() };
다뤄야할 객체의 수가 많을 때는 for문을 사용한다.
Tv[] tvArr = new Tv[100];
for(int i=0; i< tvArr.lengh; i++){
tvArr[i] = new Tv();
}
클래스의 또 다른 정의
1. 클래스 - 데이터와 함수의 결합
프로그래밍 언어에서 데이터 처리를 위한 데이터 저장형태의 발전과정은
변수 → 배열 → 구조체 → 클래스 이다.
- 변수 : 하나의 데이터를 저장할 수 있는 공간
- 배열 : 같은 종류의 여러 데이터를 하나의 집합으로 저장할 수 있는 공간
- 구조체 : 서로 관련된 여러 데이터를 종류에 관계없이 하나의 집합으로 저장할 수 있는 공간
- 클래스 : 데이터와 함수의 결합(구조체 + 함수)
2. 클래스 - 사용자 정의 타입(user-defined type)
언어자체에서 제공하는 자료형외에 사용자가 서로 관련된 변수들을 묶어 하나의 타입으로 새로 추가하는 것을 사용자 정의 타입 이라고 한다.
즉, 클래스가 곧 사용자 정의 타입이다.