클래스와 객체의 정의와 용도
클래스랑 객체를 정의해놓은 것 또는 클래스는 객체의 설계도 또는 틀이라고 정의할 수 있다.
클래서의 정의 : 클래스란 객체를 정의해 놓은 것이다.
클래스의 용도 : 클래스는 객체를 생성하는데 사용된다.
프로그래밍에서의 객체는 클래스에 정의된 내용대로 메모리에 생성된 것을 뜻한다.
객체의 정의 : 실제로 존재하는 것, 사물 또는 개념
객체의 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름
유형의 객체 : 책상, 의자, 자동차, TV와 같은 사물
무형의 객체 : 수학공식, 프로그램 에러와 같은 논리와 개념
클래스는 단지 객체를 생성하는 데 사용될 뿐, 객체는 아니다. 원하는 기능의 객체를 사용하기 위해서는 클래스로부터 객체를 먼저 만들어야 한다.
클래스 | 객 체 |
제품 설계도 | 제품 |
TV 설계도 | TV |
붕어빵 기계 | 붕어빵 |
클래스를 잘 만들어 놓으면 객체를 생성할 때마다 고민할 필요 없이 클래스로부터 객체를 생성해서 사용하기만 하면 된다.
객체와 인스턴스
클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화(instantiate)라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스(instance)라고 한다.
인스턴스 화
클래스 -------------> 인스턴스(객체)
객체의 구성요소 - 속성과 기능
객체는 속성과 기능, 두 정류의 구성요소로 이루어져 있으며, 일반적으로 객체는 다수의 속성과 다수의 기능을 갖는다.
객체는 속성과 기능의 집합이라고 할 수 있다.
객체가 가지고 있는 속성과 기능을 그 객체의 멤버(구성원, member)라 한다.
속성(property) : 멤버변수(member variable), 특성(attribute), 필드(field), 상태(state)\
기능(function) : 메서드(method), 함수(function), 행위(behavior)
객체지향 프로그래밍에서는 속성과 기능을 각각 변수와 메서드로 표현한다.
속성(property) > 멤버변수(variable)
기능(function) > 메서드(method)
인스턴스의 생성과 사용
클래스명 변수명; //클래스의 객체를 참조하기 위한 참조변수를 선언
변수명 = new 클래스명(); // 클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장
class Tv {
String color;
boolean power;
int channel;
void power() {power = !power;}
void channelUp() { ++channel;}
void channelDown() { --channel;}
}
class TvTest{
public static void main(String[] args) {
Tv t;
t = new Tv();
t.channel = 7;
t.channelDown();
System.out.println("현재 채널은 " + t.channel + " 입니다.");
}
}
현재 채널은 6 입니다.
Tv라는 인스턴스를 생성해서(t = new Tv();)
TvTest라는 메인 메서드에 인스턴스 함수(t.channelDown();)를 호출해서 사용이 가능하다.
인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야 한다.
클래스의 또 다른 정의
1. 클래스란 - 데이터와 함수의 결합이다.
1. 변수 하나의 데이터를 저장할 수 있는 공간
2. 배열 같은 종류의 여러 데이터를 하나의 집합을 저장할 수 있는 공간
3. 구조체 서로 관련된 여러 데이터를 종류에 관계없이 하나의 집합으로 저장할 수 있는 공간
4. 클래스 데이터와 함수의 결합(구조체 + 함수)
하나의 데이터를 저장하기 위해 변수를, 그리고 같은 종류의 데이터를 보다 효율적으로 다루기 위해서 배열이라는 개념을 도입했으며, 후에 구조체(structure)가 등장하여 자료형의 종류에 상관없이 서로 관계가 깊은 변수들을 하나로 묶어서 다룰 수 있도록 했다.
함수는 주로 데이터를 가지고 작업을 하기 때문에 많은 경우에 있어서 데이터와 함수는 관계가 깊다.
자바와 같은 객체지향 언어에서는 변수(데이터)와 함수를 하나의 클래스에 정의하여 서로가 관계가 깊은 변수와 함수들을 함께 다룰 수 있게 했다.
서로 관련된 변수들을 정의하고 이들에 대한 작업을 수행하는 함수들을 함께 정의한 것이 바로 클래스이다.
C언어에서는 문자열을 문자의 배열로 다루지만, 자바에서는 String이라는 클래스로 문자열을 다룬다.
2. 클래스 - 사용자정의 타입(user-defined type)
프로그래밍언어에서 제공하는 자료형(primitive type)외에 프로그래머가 서로 관련된 변수들을 묶어서 하나의 타입으로 새로 추가하는 것을 사용자정의 타입(user-defined type)이라고 한다.
자바에서는 클래스가 곧 사용자정의 타입니다.
public class Time {
private int hour;
private int minute;
private float second;
public int getHHour() {return hour; }
public int getMinute() {return minute; }
public float getSecond() {return second;}
public void setHour(int h) {
if ( h < 0 ||h >23) return;
hour = h;
}
public void setMinute(int m) {
if (m < 0 || m >59) return;
minute = 0;
}
public void setSecond(float s) {
if (s < 0.0f || s >59.99f) return;
second=s;
}
}
시간이란 class를 정의하고 조건에따라 조건에따라 값을 반환한다.