본문 바로가기
Language/java

JAVA_객체지향 프로그래밍 (클래스와 객체)

by gamxong 2022. 6. 29.

객체지향언어의 특징

1. 코드의 재사용성이 높다.

새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.

 

2. 코드의 관리가 용이하다

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

 

3. 신뢰성이 높은 프로그래밍을 가능하게 한다.

제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다.

 

 

클래스와 객체

 

 클래스 :

  객체를 정의해놓은 것, 객체의 설계도 또는 틀

 

객체 :

  클래스에 정의된 내용대로 메모리에 생성된 것

 

Ex :

  TV설계도(클래스) - TV(객체)

 

 

클래스를 정의하고 클래스를 통해 객체를 생성하는 이유는 객체를 생성할 때 간편하게 생성하기 위해서

 

 

객체와 인스턴스

 

인스턴스화 :

 클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화

 

인스턴스 :

 어떤 클래스로부터 만들어진 객체

 

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

 

 

객체의 구성요소
 - 속성, 기능

 

객체 : 

 다수의 속성과 다수의 기능을 갖음

 

속성 멤버변수, 특성, 필드, 상태
기능 메서드, 함수, 행위

 

* 일반적으로 멤버변수 먼저 선언하고 메서드 선언

 

 

 

인스턴스의 생성과 사용

 

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

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

 

※ 인스턴스는 참조변수를 통해서만 다룰 수 있으며,

                                         참조변수의 타입은 인스턴스의 타입과 일치해야 한다.

 

Tv t1 = new Tv();    // 주소값 0x100
Tv t2 = new Tv();   // 주소값 0x200

-> 같은 클래스의 인스턴스라고 해도 선언을 달리하면 주소값은 다르다.

t2 = t1   // t1이 저장하고 있는 주소를 t2에 저장한다. (t2가 참조하고 있던 인스턴스는 더 이상 사용 불가)

 

★ 참조변수에는 하나의 값(주소)만이 저장될 수 있다.

    ( 하나의 참조변수가 여러 개의 인스턴스를 가리키는 것은 불가능 )

 

 

객체 배열

 

객체 배열은 참조변수들을 하나로 묶은 참조 변수 배열이다.

 

Tv tv1,tv2,tv3;  ->  Tv[] tvArr = new Tv[3];   // 참조변수 배열(객체배열)을 생성

// 객체를 생성해서 배열의 각 요소에 저장
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();

 

객체 배열을 생성하는 것은, 그저 객체를 다루기 위한 참조변수들이 만들어진 것일 뿐, 아직 객체가 저장되지 않음.

 

 

* 객체 배열 예제

package song_pack;
import java.util.*;

public class song_class {
	public static void main(String[] args) {
		Tv[] tvArr = new Tv[3];
		
		for(int i=0; i<tvArr.length; i++) {
			tvArr[i] = new Tv();
			tvArr[i].channel = i+10;
		}
		
		for(int i=0; i<tvArr.length;i++) {
			tvArr[i].channelUp();
			System.out.printf("%d %d%n", i, tvArr[i].channel);
		}
	}
}

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

 

 

 

댓글