객체지향 프로그래밍
(Object-oriented Programming)
객체지향 언어(Object-oriented Programming)
객체지향 언어는 프로그램을 객체 단위로 나누어 객체를 중심으로 프로그램을 구성하는 언어를 말한다.
객체지향언어의 장점
1. 코드의 재사용성이 높다.
2. 코드의 관리가 용이하다.
3. 신뢰성이 높은 프로그래밍을 가능하게 한다.
클래스와 객체
클래스 |
클래스는 '객체를 생성하기 위한 틀'이며 속성과 기능으로 정의되어 있다. |
객체 |
객체는 '실제로 존재하는 것' 우리가 주변에서 볼 수 있는 책상, 의자, 자동차와 같은 사물이 유형의 객체, 수학공식, 프로그램 에러와 같은 논리나 개념을 무형의 객체라고 정의한다. |
클래스를 정의하고 클래스를 통해 객체를 생성하는 이유는 설계도를 통하여 제품을 만드는 이유와 같다. 하나의 설계도만 잘 만들어 놓으면 제품을 만드는 일이 쉬워지기 때문이다.
객체와 인스턴스
클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화(instansce)라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스(instance)라고 한다.
객체의 생성과 사용
클래스로부터 인스턴스를 생성하는 방법은 여러가지가 있지만 일반적으로 다음과 같이 한다.
/ 클래스의 객체를 참조하기 위한 참조변수 선언
클래스명 변수명;
/ 클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장
변수명 = new 클래스명();
// Tv클래스 타입의 참조변수 t를 선언
Tv t;
// Tv인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장
t = new Tv();
예제)
class exanple {
public static void main(String[] args) {
Tv t;
t = new Tv();
t.channel = 7;
t. channelDown();
System.out.println("현재 채널은 " + t.channel + " 입니다.");
}
}
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의 채널을 낮추는 기능을 하는 메서드
}
1. Tv t;
Tv클래스 타입의 참조변수 t를 선언 - 메모리에 참조변수 t를 위한 공간이 생성되고 아직 인스턴스가 생성되지 않았으므로 이 참조변수로 할 수 있는 것은 아무것도 없다.
2. t = new Tv( );
연산자 new에 의해 Tv클래스의 인스턴스가 메모리의 빈 공간에 생성된다. 이 때 멤버변수는 각 자료형에 해당하는 기본값으로 초기화된다.
color는 참조형이므로 null, power는 boolean형이므로 false, channel은 int이므로 0으로 초기화
3. t.channel = 7;
참조변수 t에 저장된 주소에 있는 인스턴스의 멤버변수 channel에 7을 저장한다. 인스턴스의 멤버변수(속성)를 사용하려면 '참조변수.멤버변수'의 형태로 하면 된다.
4. t.channelDown( );
참조변수 t가 참조하고 있는 Tv인스턴스의 channelDown메서드를 호출하여 멤버변수 channel에저장되어 있는 값을 1 감소시킨다. - void channelDown() { --channel; } - channelDown()에 의해서 channel의 값은 7에서 6이 된다.
5. System.out.println("현재 채널은 " + t.channel + " 입니다.");
참조변수 t가 참조하고 있는 Tv인스턴스의 멤버변수 channel에 저장되어 있는 값을 출력한다.
현재 channel의 값을 6이므로 "현재 채널은 6 입니다."가 화면에 출력된다.
인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야 한다.
객체 배열
객체 역시 배열로 다루는 것이 가능하며 이를 '객체 배열'이라고 한다. 객체 배열 안에 객체가 저장되는 것은 아니고 객체의 주소가 저장된다. 사실 객체 배열은 참조변수들을 하나로 묶은 참조변수 배열인 것이다.
Tv tv1, tv2, tv3;
// 길이가 3인 Tv 타입의 참조변수 배열
tv[] tvArr = new Tv[3];
객체 배열을 생성하는 것은 그저 객체를 다루기 위한 참조변수들이 만들어진 것일 뿐 아직 객체가 저장되지 않았다.
// 참조변수 배열(객체 배열)을 생성
Tv[] tvArr = new Tv[3];
// 객체를 생성해서 배열의 각 요소에 저장
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
배열을 생성하고 객체를 생성하여 배열의 각 요소에 저장해 주어야 한다.
'Programming > Java' 카테고리의 다른 글
[Java] String / StringBuffer / StringBuilder 사용법 및 차이점 - 불변 문자열, 가변 문자열 (2) | 2021.03.25 |
---|---|
[Java] 자료구조 - 스택(Stack)이란 무엇인가? (스택 개념, 연산, 구현) (0) | 2021.03.22 |
[Java] 조건문/반복문을 이용해 배수가 아닌 수 찾기 (0) | 2020.11.10 |
[Java] 배열(Array) - String 배열, String 클래스, String 메서드, 2차원 배열 (1) | 2020.04.23 |
[Java] 배열(Array) - 선언과 생성, 인덱스, 길이(.length), 초기화, 출력 (0) | 2020.04.19 |