본문 바로가기
Java

[Java] 객체지향언어 / 클래스, 객체, 인스턴스, 참조변수, 메서드

by Yeoseungwon 2023. 6. 11.
728x90

객체지향언어란 

1. 코드의 재사용성이 높다.  (새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.)

2. 코드의 관리가 용이하다. (코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.) 

3. 신뢰성이 높은 프로그래밍을 가능하게 한다. (제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며,

                                                                         코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다.)

 

클래스와 객체

1. 클래스란

 - '객체를 정의해놓은 것' , '객체의 설계도 또는 틀'  => 클래스는 객체를 생성하는데 사용되며, 

                                                                                    객체는 클래스에 정의된 대로 생성된다. 

ex) 제품 설계도와 제품의 관계

클래스 객체
제품 설계도 제품
TV 설계도  TV
붕어빵 기계 붕어빵  

 - 클래스를 정의하고 클래스를 통해 객체를 생성하는 이유 :

     하나의 설계도(클래스)만 잘 만들어 놓으면 제품(객체)을 만드는 일이 쉬워진다. 

 

 

객체와 인스턴스

 - 인스턴스 : 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고함 

                     (객체는 모든 인스턴스를 대표하는 포괄적인 의미,

                      인스턴스는 어떤 클래스로부터 만들어진 것인지를 강조하는 보다 구체적인 의미 )

   ex ) 아래표처럼 두 용어의 사용을 엄격히 구분할 필요는 없지만 문맥에 따라 구별하여 사용하는 것이 좋다. 

'책상은 인스턴스다' x (좋지 않은 예)
'책상은 객체다' o (좋은 예)
'책상은 책상클래스의 객체이다' x (좋지 않은 예)
'책상은 책상 클래스의 인스턴스다' o (좋은 예)

 

객체의 구성요소 - 속성(멤버변수)과 기능(메서드)

 - 객체는 속성과 기능 두종류의 구성요소로 이루어져 있음 

 - 객체가 가지고 있는 속성과 기능을 그 객체의 멤버(구성원, member) 라고 한다. 

 - 클래스에는 객체의 모든 속성과 기능이 정의되어 있다 -> 객체는 클래스에 정의된 속성과 기능을 가진다.  

 - 객체지향 프로그래밍에서는 속성과 기능을 각각 변수와 메서드로 표현한다. 

속성 property 멤버변수(member variable),  특성(attribute),  필드(field),  상태(state)
기능 function 메서드(method),  함수(function),  행위(behavior)

ex) TV

속성 크기, 길이, 높이, 색상, 볼륨, 채널 등 int channel
기능  켜기, 끄기, 볼륨 높이기, 볼륨 낮추기, 채널 변경하기 등  channelUp(){...}

 

TV 클래스를 만든 예 

class TV{
	String color; 
    boolean power;
    int channel;
    
    void power() { power = !power; }
    void channelUp() { chnnel++; }
    void channelDown() { channel++; }
}

이렇게 클래스만 선언한 것은 TV설계도를 작성한 것에 불과하다. 

TV인스턴스를 생성해야 제품을 사용할 수 있다. 

클래스로부터 인스턴스를 생성하는 방법은 여러가지가 있지만 일반적으로는 아래와 같다. 

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

Tv t;					//Tv클래스 타입의 참조변수 t를 선언
t = new Tv();			//Tv인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장

 

Tv클래스로부터 인스턴스를 생성하고 인스턴스의 속성(channel)과 메서드(channelDown())를 사용하는 예

class TV{
	String color; 
    boolean power;
    int channel;
    
    void power() { power = !power; }
    void channelUp() { chnnel++; }
    void channelDown() { channel++; }
}

class TvTest{
	public static void main(String args[]){
    	Tv t;
        t = new Tv();
        t.channel = 7;
        t.channelDown();
        System.out.println("현재 채널은" + t.channel + "입니다"); // 6 
    }
}

 ** Tv t = new Tv(); 한문장으로 가능 

t(참조변수).chnnel(인스턴스의 멤버변수) = 7 저장 

t(참조변수).chnnelDown() (Tv인스턴스의 메서드호출)

  ** 인스턴스는 참조변수를 통해서만 다룰 수 있다. 참조변수의 타입은 인스턴스의 타입과 일치해야한다. 

 

t2 = t1 ;

class TV{
	String color; 
    boolean power;
    int channel;
    
    void power() { power = !power; }
    void channelUp() { chnnel++; }
    void channelDown() { channel--; }
}

class TvTest{
	public static void main(String args[]){
    	Tv t1 = new Tv();
        Tv t2 = new Tv();
        
        t2= t1; //t1이 저장하고 있는 값(주소)을 t2에 저장한다. 
        t1.channel = 7; 
        
        system.out.println(t1.channel) //7
        system.out.println(t2.channel) //7
     }
}

 

t1은 참조변수이므로, 인스턴스의 주소를 저장하고 있다. 

그럼 t2 가 가지고 있던 값은 잃어버리게 되고 t1이 참조하고 있던 인스턴스를 같이 참조하게 된다. 

(참조변수가 하나도 없는 인스턴스는 더 이상 사용되어질 수 없으므로 '가비지 컬렉터' 에 의해서 자동적으로 메모리에서 제거된다.)

 

참조변수에는 하나의 값(주소) 만이 저장될 수 있으므로 둘 이상의 참조변수가 하나의 인스턴스를 가리키는(참조하는) 것은 가능하지만 하나의 참조변수로 여러 개의 인스턴스를 가리키는 것은 가능하지 않다. 

 

 

 

 

 

자바의정석 요약 

728x90

'Java' 카테고리의 다른 글

[java] java로 xml 다운로드  (0) 2024.07.01
[java] xml 생성  (1) 2024.06.19
[java] pdf 생성  (0) 2024.06.19
[java] xsl+xml 을 pdf파일로 변환하기  (0) 2024.06.19
Java 타입  (0) 2023.09.22