객체지향프로그래밍(OOP : Object - Oriented Programming)
클래스와 객체
클래스
객체를 생성하기 위한 틀이며 속성과 기능으로 정의되어 있다
클래스 정의 - 객체를 정의해놓은 것
클래스 용도 - 객체를 생성하는데 사용
객체
존재하는 사물(사람, 자동차, 책상, 의자 등등)이나 눈에 보이지 않는 추상적인 것들(수학공식, 프로그램 에러와 같은 논리나 개념) 나타내는 것을 객체라고 한다.
객체 정의 - 실제로 존재하는 것, 사물 또는 개념
객체 용도 - 객체가 가지고 있는 기능과 속성에 따라 다름
클래스와 객체의 예시
클래스 | 객체 |
---|---|
제품 설계도 | 제품 |
TV 설계도 | TV |
붕어빵 기계 | 붕어빵 |
객체와 인스턴스
클래스로부터 객체를 만드는 과정을 인스턴스화(instantiate)
어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스(instance)
인스턴스의 생성과 사용
예시 1)
class TV{
-- Tv의 속성(멤버변수 or 필드)
String color; -- 색상
boolean power; -- 전원상태(on/off)
int channer; -- 채널
-- Tv의 기능(메서드)
void power() { power = !power }; -- TV를 켜거나 끄는 기능을 하는 메서드
void channerUp() { ++channel }; -- TV의 채널을 높이는 기능을 하는 메서드
void chaanerDown() { --channel }; -- TV의 채널을 낮추는 기능을 하는 메서드
}
class TvTest {
public static void main(String args[]){
TV t; -- Tv 클래스 타입의 참조변수(Tv인스턴스) t를 선언
t = new Tv(); -- 연산자 new에 의해 Tv클래스의 선언된 멤버변수
값들을 기본값으로 초기화(Tv인스턴스 생성)
t.channel = 7; -- 참조변수 t에 있는 멤버변수 channel에 7을 저장
t.channelDown(); -- Tv 인스턴스의 메서드 channelDown() 호출
}
}
예시 1) 그림으로 객체 생성 예시
그 다음에 대입연산자(=)에 의해 생성된 객체의 주소값이 참조변수 t에 저장되어 참조변수 t가 Tv인스턴스에 접근할 수 있다.
참조변수 t에 저장된 주소에 있는 인스턴스의 멤버변수 channel에 7을 저장한다.
인스턴스는 참조변수를 통해서만 다룰 수 있고, 참조변수의 타입은 인스턴스의 타입과 일치해야 한다.
예시 2)
class TV{
-- Tv의 속성(멤버변수 or 필드)
String color; -- 색상
boolean power; -- 전원상태(on/off)
int channer; -- 채널
-- Tv의 기능(메서드)
void power() { power = !power }; -- TV를 켜거나 끄는 기능을 하는 메서드
void channerUp() { ++channel }; -- TV의 채널을 높이는 기능을 하는 메서드
void chaanerDown() { --channel }; -- TV의 채널을 낮추는 기능을 하는 메서드
}
class TvTest {
public static void main(String args[]){
TV t1 = new Tv(); -- Tv t1; t1 = new Tv(); 를 한문장으로 줄임
TV t2 = new Tv();
t1.channel = 7; -- channel값을 7로 저장
}
}
예시 2) 그림으로 객체생성 예시
인스턴스 t1과 t2생성
변수
class Variable{
int iv; // 인스턴스 변수
static int cv; // 클래스 변수(static변수, 공유 변수)
void method(){
int lv = 0; // 지역 변수
}
}
변수의 종류 | 선언위치 | 생성시기 |
---|---|---|
클래스 변수 | 클래스 영역 | 클래스가 메모리에 올라갈 때 |
인스턴스 변수 | 클래스 영역 | 인스턴스가 생성되었을 때 |
지역 변수 | 클래스 영역 이외의 영역 | 변수 선언문이 수행되었을 때 |
인스턴스 변수
클래스 영역에 선언되며 클래스의 인스턴스를 생성할 때 만들어진다. 인스턴스 변수를 사용하기 위해서는 인스턴스를 먼저 생성해야 사용 가능하다.
클래스 변수
인스턴스 변수 앞에 static을 붙이면 사용 가능하다. 인스턴스마다 독립적인 저장공간을 갖는 인스턴스변수와 달리 클래스변수는 모든 인스턴스가 공통된 저장공간을 공유하게 된다. 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하는 속성의 경우 클래스변수로 선선해야 한다.
지역 변수
매서드 내에 선언되어 메서드 내에서만 사용 가능하며 메서드가 종료되면 소멸되어 사용할 수 없게 된다. for문 또는 while문의 블럭 내에 선언된 지역변수는 블럭{} 내에서만 사용 가능하고 벗어나면 소멸되어 사용할 수 없게 된다.
※ 참고 문헌
남궁성, 『Java의 정석 3nd Edition』, 도우출판(2016) 책으로 공부하고 정리한 내용 입니다.