OOP(Object Oriented Programing)
객체 지향 프로그래밍
현실 세계를 modeling하여 컴퓨터 프로그램으로 나타내는 개념
클래스(설계도)를 정의하여 컴퓨터 상에 인스턴스(실체)로 프로그래밍하는 것
ex) 시뮬레이션
객체 지향에서의 프로그래밍 기본 개념
캡슐화(은닉화)
관련 있는 속성(data)과 기능(method)를 하나(class)로 관리하는 것
class내부에서 처리되는 일은 외부에서 알 수 없음(사용 방법만 공개)
상속
이전에 만들어 놓은 설계도에 기능을 추가하는 것
코드의 재사용성 및 신뢰성 증가
추상화
특정한 모양이 정해지지 않은 것
추상적인 것을 여러 형태로 정의하여 사용이 가능한 특성
다형성
하나의 형태가 여러 형태로 만들어 지고 사용될 수 있는 특성
Overloading, Overriding 등
위의 개념을 표현하기 위한 기반이 바로 Class 이다.
자바에서 Class는 다음과 같은 요소가 있다.
Member Field
Member Method
Constructor
Access Modifiers
Garbage Collection
객체지향 프로그램은 클래스를 기반으로 하여 구현
클래스
객체를 정의해 놓은 것(설계도, 형틀 등)
객체
클래스를 바탕으로 메모리에 실체를 구현한 것
class의 구성 요소
클래스는 객체가 가지는 속성과 기능이 들어있다.(멤버로 구성)
속성은 변수, 기능은 메서드로 정의한다.
ex)
TV라는 객체는 전원, 채널, 음량 등의 속성이 있다.
TV라는 객체는 전원on/off , 채널변경, 음량변경 등의 기능이 있다.
위의 속성과 기능을 멤버(변수, 메서드)로 정의한 것이 클래스다.
C언어를 알고 있는 사람은 다음과 같이 구조체와 연결하여 이해 가능
변수
하나의 데이터를 저장할 수 있는 공간
배열
동일한 형태의 데이터를 저장할 수 있는 연속된 공간
구조체
서로 다른 형태의 데이터를 저장할 수 있는 연속된 공간(사용자 정의 자료형)
클래스
서로 다른 형태의 데이터를 저장하는 공간과 기능이 결합된 형태(구조체 + 함수)
클래스는 다음과 같은 멤버로 구성된다.
멤버 필드
C++에서 이야기 하는 멤버 변수와 동일한 개념
클래스 내부에 데이터를 저장할 수 있는 변수를 이야기한다.
객체가 동작하면서 사용하게 되는 변수
멤버 메서드
C++에서 이야기하는 멤버 함수와 동일한 개념
클래스 내부의 멤버필드를 사용하는 함수를 이야기 한다.
객체가 동작하는 기능
다음과 같이 TV라는 객체를 만들고자 한다면
TV가 가지는 속성과 기능을 클래스로 정의할 수 있다.
다음 예제를 작성하고 동작을 그려보며 클래스와 객체의 개념을 먼저 이해한다.
package exam;
class TV {
boolean power; // 전원
int channel; // 채널
void power() {
power = !power;
}
void channelUp() {
channel++;
}
void channelDown() {
channel--;
}
}
public class Exam {
public static void main(String[] args) {
TV t; // 참조변수
t = new TV(); // 객체 생성
t.power(); // 기능 사용
t.channelUp();
}
}
위 코드가 실행될 때 TV객체가 생성되는 부분을 그림으로 표현하면 다음과 같다.
t는 생성된 TV객체를 참조하며
다음과 같이 참조변수.(점)을 사용하여 멤버에 접근이 가능하다.
위에 작성된 TV클래스는 객체를 정의해 놓은 것이며
new를 통해 메모리에 생성(인스턴스화)된 것이 객체이다.
위 예제를 동작시켜 보기 위해 다음과 같은 코드를 추가하여 실행해본다.
package exam;
class TV {
boolean power;// 전원
int channel;// 채널
int volume;// 볼륨
void power() {
power = !power;
}
void channelUp() {
channel++;
}
void channelDown() {
channel--;
}
void volumeUp() {
volume++;
}
void volumeDown() {
volume--;
}
void disp() {
if (power)
System.out.print("전원 : 켜짐 ");
else
System.out.print("전원 : 꺼짐 ");
System.out.print(" 채널 : " + channel);
System.out.println(" 볼륨 : " + volume);
}
}
public class Exam {
public static void main(String[] args) {
TV t;
t = new TV();
t.disp();
t.power();
t.channelUp();
t.volumeDown();
t.disp();
}
}
실행결과
위 개념을 이용하여 리모컨을 정의해본다.(그림 참조)
리모컨의 기능과 속성을 생각하여 멤버필드와 멤버 메서드를 분류
ex) 속성 : 전원, 채널, 볼륨 등(이 때 TV를 참조해야 한다는 것을 이해)
기능 : 전원, 채널변경, 볼륨변경 등
리모컨의 속성(값)은 멤버 필드(변수)로, 기능은 멤버 메서드(함수)로 정의
작성 후 main()에서 객체를 생성하여 기능 테스트(리모컨이 TV를 사용)
*중요:리모컨을 사용하여 TV의 기능을 동작시킨다는 것을 클래스로 작성하여 객체로 표현
리모컨 예제 코드)
package exam;
class TV {
boolean power;// 전원
int channel;// 채널
int volume;// 볼륨
void power() {
power = !power;
}
void channelUp() {
channel++;
}
void channelDown() {
channel--;
}
void volumeUp() {
volume++;
}
void volumeDown() {
volume--;
}
void disp() {
if (power)
System.out.print("전원 : 켜짐 ");
else
System.out.print("전원 : 꺼짐 ");
System.out.print(" 채널 : " + channel);
System.out.println(" 볼륨 : " + volume);
}
}
class RC {
TV t; // TV객체를 참조하는 참조변수
void power() {
t.power();
}
void channelUp() {
t.channelUp();
}
void channelDown() {
t.channelDown();
}
void volumeUp() {
t.volumeUp();
}
void volumeDown() {
t.volumeDown();
}
}
public class Exam {
public static void main(String[] args) {
TV t;
t = new TV();
RC rc = new RC();
rc.t = t;
t.disp();
rc.power();
rc.channelUp();
rc.volumeDown();
t.disp();
}
}
개념을 그림으로 표현하면 다음과 같다.
위 내용이 클래스를 이해하기 위한 기본 개념이며 동시에 객체지향을 이해하기 위한 기본 개념이다. 현실 세계를 모델링 한다는 것은 위와 같이 세상의 모든 것은 객체 단위로 표현할 수 있고(클래스 정의) 그렇게 만들어진 객체들 간에 서로 관계를 맺으며 상호 작용한다는 것을 프로그래밍으로 표현하는 방법인 것이다.
'교육자료 > Java' 카테고리의 다른 글
Java 클래스 구성요소(생성자) (0) | 2017.06.16 |
---|---|
Java 클래스 구성요소(멤버필드와 멤버메서드) (0) | 2017.06.15 |
Java 배열(Array) (0) | 2017.06.14 |
Java 메서드(Method) (0) | 2017.06.14 |
Java 제어문 break continue (0) | 2017.06.13 |