해당 게시물은 자바의 정석을 정리한 내용 입니다.
1. 객체 지향 언어의 특징
- 기존의 프로그래밍 언어와 크게 다르지 않다.
- 코드의 재사용성이 높다.
- 코드의 관리가 쉬워졌다.
- 신뢰성이 높은 프로그램의 개발을 가능하게 한다.
객체 지향 프로그래밍이 추구하는 궁극적인 목표는 재사용성을 높이고 중복을 제거하는 것이다.
2.1. 클래스와 객체의 정의와 용도
클래스의 정의 - 객체를 정의해 놓은 것이다.
클래스의 용도 - 객체를 생성하는데 사용된다.
객체의 정의 - 실제로 존재하는 것. 사물 또는 개념.
객체의 용도 - 객체의 속성과 기능에 따라 다름.
클래스 | 객체 |
제품 설계도 | 제품 |
TV 설계도 | TV |
붕어빵 기계 | 붕어빵 |
2.2. 객체와 인스턴스
객체 ≒ 인스턴스
- 객체(object)는 인스턴스(instance)를 포함하는 일반적인 의미
- 인스턴스(instance)는 특정 클래스의 객체라는 것을 강조할 때 사용된다.
인스턴스화(instantiate)
- 클래스로부터 인스턴스를 생성하는 것을 말함
2.3. 객체의 구성요소 - 속성과 기능
- 객체는 속성과 기능으로 이루어져 있다.
- 속성은 변수로, 기능은 메서드로 정의한다.
2.4. 인스턴스의 생성과 사용
인스턴스 생성 방법
클래스명 참조변수명;
참조변수명 = new 클래스명 ();
인스턴스 생성 예시
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의 채널을 낮추는 기능을 하는 메서드
}
class TvTest {
public static void main(String args[]) {
Tv t; // Tv인스턴스를 참조하기 위한 변수 t를 선언
t = new Tv(); // Tv인스턴스를 생성한다.
t.channel = 7; // Tv인스턴스의 멤버변수 channel의 값을 7로 한다.
t.channelDown(); // Tv인스턴스의 메서드 channelDown()을 호출한다.
System.out.println("현재 채널은 " + t.channel + " 입니다.");
}
}
class TvTest3 {
public static void main(String args[]) {
Tv t1 = new Tv();
Tv t2 = new Tv();
System.out.println("t1의 channel값은 " + t1.channel + "입니다.");
System.out.println("t2의 channel값은 " + t2.channel + "입니다.");
t2 = t1; // t1이 저장하고 있는 값(주소)을 t2에 저장한다.
t1.channel = 7; // channel 값을 7로 한다.
System.out.println("t1의 channel값을 7로 변경하였습니다.");
System.out.println("t1의 channel값은 " + t1.channel + "입니다.");
System.out.println("t2의 channel값은 " + t2.channel + "입니다.");
}
}
2.5. 객체 배열
- 객체를 배열로 생성 할 수도 있다.
- 객체 배열은 참조 변수 배열이다.
- 즉, 객체 배열을 생성하는 것은 참조 변수들이 만들어진 것일 뿐 객체 배열의 각 요소에 객체를 생성해서 저장해야 한다.
Tv[] tvArr = new Tv[3]; // 참조변수 배열(객체 배열)을 생성
// 배열의 각 요소에 객체를 생성해서 저장
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
class TvTest4 {
public static void main(String args[]) {
Tv[] tvArr = new Tv[3]; // 길이가 3인 Tv객체 배열
// Tv객체 배열의 각 요소에 Tv객체를 생성해서 저장
for(int i=0; i < tvArr.length;i++) {
tvArr[i] = new Tv();
tvArr[i].channel = i+10; // tvArr[i]의 channel에 i+10을 저장
}
for(int i=0; i < tvArr.length;i++) {
tvArr[i].channelUp(); // tvArr[i]의 메서드를 호출. 채널이 1증가
System.out.printf("tvArr[%d].channel=%d%n",i,tvArr[i].channel);
}
} // main의 끝
}
2.6. 클래스의 또 다른 정의
1) 클래스 - 데이터와 함수의 결합
① 변수 - 하나의 데이터를 저장할 수 있는 공간
② 배열 - 같은 타입의 여러 데이터를 저장할 수 있는 공간
③ 구조체 - 타입에 관계없이 서로 관련된 데이터들을 저장할 수 있는 공간
④ 클래스 - 서로 관련된 데이터와 함수의 결합 (구조체 + 함수)
2) 클래스 - 사용자 정의 타입(User-defined type)
- 프로그래머가 직접 새로운 타입을 정의할 수 있다.
- 서로 관련된 값을 묶어서 하나의 타입으로 정의한다.
class Time{
int hour;
int minute;
int second;
}
'Java > 객체 지향 개념 ~' 카테고리의 다른 글
자바의 정석 (Chapter 7_3. 객체지향개념 2) (0) | 2020.08.03 |
---|---|
자바의 정석 (Chapter 7_2. 객체지향개념 2) (0) | 2020.08.02 |
자바의 정석 (Chapter 7_1. 객체지향개념 2) (0) | 2020.08.02 |
자바의 정석 (Chapter 6_3. 객체지향개념 1) (0) | 2020.08.01 |
자바의 정석 (Chapter 6_2. 객체지향개념 1) (0) | 2020.07.31 |
댓글