자바의정석/Chapter 6

ch6-2 클래스와 객체

suniverse 2022. 11. 28. 19:33

- 클래스의 정의: 클래스란 객체를 정의해 놓은 것

- 클래스의 용도: 클래스는 객체를 생성하는데 사용 

- 객체의 정의: 실제로 존재하는 것. 사물 또는 개념

- 객체의 용도: 객체가 가지고 있는 기능과 속성에 따라 다름

<ch6-3 객체의 구성요소 - 속성과 기능> 

 

객체지향개념은 원래 군사적인 용도로 만들어 졌다. 

 

 

객체 = 속성(변수) + 기능(메소드)

 

<ch6-4 객체와 인스턴스> 

 

객체: 모든 인스턴스를 대표하는 일반적 용어 

인스턴스: 특정 클래스로부터 생성된 객체(예: tv인스턴스) 

--> 두 단어는 거의 비슷한 용어이다 

 

 

               인스턴스화 

클래스 ----------------------------> 인스턴트(객체)

 

 

Q. 클래스(설계도)가 왜 필요한가? 

A. 객체(제품)를 생성하기 위해 

 

Q. 객체가 왜 필요한가? 

A. 객체를 사용하기 위해 

 

Q. 객체를 사용한다는 것은? 

A. 객체가 가진 속성(변수)과 기능(메소드)을 사용하려고 

 

------------------------------------------------------------------------------------------------

 

 

<ch6-5 한 파일에 여러 클래스 작성하기> 

 

- 자바는 대소문자 구별을 한다 

 

소스파일의 이름과 public class 이름이 일치하지 않으면 에러 발생
하나의 소스파일에는 하나의 public class만 있어야 하기 때문에 에러가 난다

-----------------------------------------------------------------

 

<ch6-6 객체의 생성과 사용> 

 

1. 객체의 생성

클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수를 선언

변수명 = new 클래스명(); // 클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장 

Tv t; // Tv클래스 타입의 참조변수 t를 선언

t = new Tv(); // Tv인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장 

--> 대입연산자를 통해 리모콘과 객체를 연결해주어야 한다. 

 

(참조변수 = 리모콘) 

 

 

2. 객체의 사용

객체를 사용한다는 건 객체가 가지고 있는 변수와 메소드를 사용한다는 의미이다

 

t.channel = 7;  Tv인스턴스의 멤버변수 channel1의 값을 7로 한다. 

t.channelDown(); // Tv인스턴스의 메소드 channelDown()을 호출한다. 

System.out.println("현재 채널은" + t.channel + "입니다."); 

 

1)클래스 작성 -->  2)객체 생성 --> 3)객체의 사용

 

 

Tv t; // Tv클래스 타입의 참조변수 t를 선언

t = new Tv(); // Tv 인스턴스를 생성한 후, 생성된 Tv 인스턴스의 주소를 t에 저장

 

이 객체는 변수 3개, 메소드 3개로 이루어져 있다

리모콘 없이 객체를 다룰 수 있는 방법은 없다! 꼭 리모콘(참조변수)가 필요하다. 생성된 객체와 리모콘은 대입연산자를 통한 연결이 필요하다. 

 

t.channel = 7; // 변수 사용. Tv인스턴스의 멤버변수 channel1의 값을 7로 한다 

t.channelDown(); // 메소드 사용(메소드 호출) Tv인스턴스의 메소드 channelDown()을 호출한다 

System.out.println("현재 채널은" + t.channel + "입니다."); 

 

 

객체마다 별도의 저장공간이 생긴다

 

   -GC 가비지 컬렉터: 사용할 수 없는 객체들을 제거한다. 불필요하게 메모리가 낭비되지 않도록 

 

 

변수는 하나의 값만 저장가능하기 때문에 여러 인스턴스를 가리킬 수 없다.

 

소스 파일의 이름과 메인 메소드의 이름이 일치

 

참조변수 t2가 가리키는 객체가 달라져서 7로 출력. (원래 실제로는 0이 맞다) 이제 t2객체는 참조변수가 없으니 사용불가. GC가 알아서 제거해준다