OOP, Class & Object
참고서적 : Java의정석 3rd Edition
객체지향언어
객체지향이란? 실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용이다.
객체지향언어의 특징
코드의 재사용성이 높다.
- 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.
코드의 관리가 용이하다.
- 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.
신뢰성이 높은 프로그래밍을 가능하게 한다.
- 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며,
코드의 중복을 제거
하여 코드의 불일치로 인한 오동작을 방지할 수 있다.
클래스와 객체
클래스의 정의 => 클래스란 객체를 정의해 놓은 것이다.
클래스의 용도 => 클래스는 객체를 생성하는데 사용된다.
프로그래밍에서 객체란 클래스에 정의된 내용대로 메모리에 생성된 것을 뜻한다.
객체의 정의 => 실제로 존재하는 것, 사물 또는 개념
객체의 용도 => 객체가 가지고 있는 기능과 속성에 따라 다르다.
JDK(Java Development Kit)에서는 유용한 클래스를 기본적으로 제공하고 있다.
객체와 인스턴스
Instance란? 클래스로부터 객체를 만드는 과정이다.
객체의 구성요소 - 속성과 기능
Class로 부터 Object를 생성하면, Class에 정의된 Property
(속성)과 Function
(기능)을 가진 Object를 생성한다.
- 객체를 생성하는 과정을 Instance화라고 한다.
Property(속성) = 멤버변수(variable)
Function(기능) = 메서드(method)
1 | // TV를 예로 들면 |
Instance의 생성과 사용
위에서 생성한 TV Class로 Instance를 생성하는 방법이다.
1 | TV t = new TV(); // TV Class의 Instance t라는 참조변수를 생성하였다. |
생성된 t는 TV Class의 Property의 초기값으로 세팅되기에 값을 저장하기 위해서는 t.channel = 8
이렇게 하면 값이 저장된다.
Instance는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 Instance의 타입과 일치해야한다. (여러개의 참조변수를 생성 할 수 있다.)
생성된 Instance들의 Property의 값을 각각 다르게 저장할 수 있지만, Method는 동일하게 사용된다.
1 | class TV { |
t2 = t1
t2가 t1의 주소를 가르키게 되서 t1을 property의 값을 변경하면 t2도 변경된다.
이때 t2가 가르키고 있던 원래 Instance는 참조변수가 하나도 없기 때문에 'Garbage Collector'
에 의해서 자동적으로 메모리에서 제거된다.
즉
하나의 Instance를 여러 개의 참조변수가 가리키는 경우는 가능하지만
여러 Instance를 하나의 참조변수가 가리키는 것은 불가능하다.
객체 배열
많은 수의 객체를 다룰때 객체 배열로 생성하여서 다룰수 있다.
이때 객체를 생성해서 꼭 객체 배열의 각 요소에 저장하는 것을 잊으면 안된다.
1 |
|
모든 배열이 그렇듯이 객체 배열도 같은 타입의 객체만 저장할 수 있다.
polymorphism을 배우고 나면 하나의 배열로 여러 종류의 객체를 다룰 수 있다.
1 | public class Tvtest4 { |
클래스의 또 다른 정의
- 변수 : 하나의 데이터를 저장할 수 있는 공간
- 배열 : 같은 종류의 여러 데이터를 하나의 집합으로 저장할 수 있는 공간
- 구조체 : 서로 관련된 여러 데이터를
type
에 관계없이 하나의 집합으로 저장할 수 있는 공간 - 클래스 : 데이터와 함수의 결합(
구조체 + 함수
)
Java에서의 문자열은 char[]가 아닌 String class로 다룬다 그 이유로는 문자열과 문자열을 다루는데 필요한 함수들을 함께 묶기 위해서이다.
아래는 Time Class를 작성하는 코드이다.
1 |
|