- 객체지향 기본 개념
: 실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용
- 객체지향프로그래밍 (Object Oriented Programming)
: 프로그램을 구성하고 있는 로직을 상태와 행위로 이루어진 것을 그루핑하여 만드는 것
1. 특징
: 상속, 추상화, 캡슐화, 다형성
2. 장점
① 코드의 재사용성 : 새로운 코드를 작성할 때 기존 코드이용
② 유지보수 : 필요없는 코드만 변경 또는 보수 가능
③ 관리 용이 : 코드간의 관계를 이용해 적은 노력으로 코드 변경 가능
- 클래스와 객체
1. 클래스
: 객체를 정의해 놓은 것
클래스는 필드(속성)와 메소드(기능)로 구성
2. 객체
: 기능과 속성에 따라 객체는 달라짐
- 객체의 구성요소
① 속성 : 멤버변수, 필드, 특성, 상태
② 기능 : 메소드. 함수, 행위
* 클래스 왜 필요 ? 객체 생성 위해
ex) Tv 설계도(클래스) 왜 필요해? Tv(객체) 만들려고
* 객체 필요 이유? 객체 사용 위해
ex) Tv 왜 필요해? Tv 사용하려고
* 객체 사용의 의미? 객체가 가진 속성과 기능을 사용
ex) Tv 사용은 뭔데? 채널(속성)따라 영상(기능1), tv on/off(기능2) 시청하는거
- 클래스와 인스턴스
: 클래스로부터 객체를 만드는 과정을 '클래스의 인스턴스화'라고 하며,
클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다.
* 객체 : 모든 인스턴스를 대표하는 일반적 용어
** 클래스, 인스턴스화, 객체, 프로그램 이해 돕기 위한 예시
(클래스) 손잡이 설계도 → (인스턴스화) → 객체1 손잡이
(클래스) 몸통 설계도 → (인스턴스화) → 객체2 몸통
(클래스) 바퀴 설계도 → (인스턴스화) → 객체3 바퀴
+ => 제품 자전거
** 예제를 보고 객체지향의 장점을 다시 살펴보면,
자전거(제품)에서 바퀴(객체3)만 고장나면,
① 바퀴만 따로 빼서 고치면 된다.-->유지보수용이
② 같은 제품의 자전거에서 멀쩡한 바퀴를 사용하면 된다. --> 재사용성
③ 특별한 장치를 달아 튼튼한 바퀴를 만든다. --> 확장
* 인스턴스의 생성과 사용(참조변수) 관련 예제(자바의정석 Ex6_3 변형)
class TvTest{
public static void main(String[] args){
Tv t1 = new Tv(); //t1 객체생성
Tv t2 = new Tv(); //t2 객체생성
System.out.println("t1의 현재 volume : " + t1.volume);
System.out.println("t2의 현재 volume : " + t2.volume);
t2 = t1;
t1.volume = 12;
System.out.println("t1의 volume을 12로 변경");
t1.volumeDown();
System.out.println("t1의 현재 volume : " + t1.volume);
System.out.println("t2의 현재 channel : " + t2.volume);
}
}
class Tv{
//필드
String color = "white";
boolean power;
int channel ;
int volume = 9;
//메소드
void power(){
power = !power;
}
void channelUp() { ++channel; }
void volumeDown() { --volume; }
} // Tv클래스 설계 끝
--> 실행과정 그림으로,, 참조변수는 자체가 아니라 "인스턴스의 주소"를 저장한다는걸 기억하자!
** 참조변수인 t1, t2에서 볼 수 있듯이 한개의 값 안에는 하나의 주소만 저장가능
t1. t2 두개의 참조변수는 --> 한개의 인스턴스 가리키는 것이 가능하다.
참조변수 한개가 두개의 인스턴스 가리키는 건 불가능!!
참고 : 자바의 정석(남궁성)
'JAVA' 카테고리의 다른 글
JAVA_JVM 메모리 구조 (0) | 2021.07.28 |
---|---|
JAVA_객체지향 프로그래밍2(변수, 메서드) (0) | 2021.07.28 |
JAVA_배열(String 배열, 다차원배열) 2 (0) | 2021.07.27 |
JAVA_배열(Array) 1 (0) | 2021.07.27 |
JAVA_도형 만들기(반복문) (0) | 2021.07.25 |
댓글