본문 바로가기
Java/객체 지향 개념 ~

자바의 정석 (Chapter 6_1. 객체지향개념 1)

by kevinntech 2020. 1. 21.

해당 게시물은 자바의 정석을 정리한 내용 입니다.

 

1. 객체 지향 언어의 특징

- 기존의 프로그래밍 언어와 크게 다르지 않다.

 

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

 

- 코드의 관리가 쉬워졌다.

 

- 신뢰성이 높은 프로그램의 개발을 가능하게 한다.

 

객체 지향 프로그래밍이 추구하는 궁극적인 목표는 재사용성을 높이고 중복을 제거하는 것이다.

2.1. 클래스와 객체의 정의와 용도

클래스의 정의 - 객체를 정의해 놓은 것이다.

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

 

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

객체의 용도 - 객체의 속성과 기능에 따라 다름.

 

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

2.2. 객체와 인스턴스

객체 ≒ 인스턴스

 

- 객체(object)는 인스턴스(instance)를 포함하는 일반적인 의미

 

- 인스턴스(instance)는 특정 클래스의 객체라는 것을 강조할 때 사용된다.

 

인스턴스화(instantiate)

 

- 클래스로부터 인스턴스를 생성하는 것을 말함

 

2.3. 객체의 구성요소 - 속성과 기능

 

- 객체는 속성과 기능으로 이루어져 있다.

 

- 속성은 변수로, 기능은 메서드로 정의한다.

 

2.4. 인스턴스의 생성과 사용

 

인스턴스 생성 방법

 

클래스명 참조변수명;
참조변수명 = new 클래스명 ();

 

인스턴스 생성 예시

 

class Tv { 
     // Tv의 속성(멤버변수) 
     String color;           	// 색상 
     boolean power;         	// 전원상태(on/off) 
     int channel;           	// 채널 

     // Tv의 기능(메서드) 
     void power()   { power = !power; }  // TV를 켜거나 끄는 기능을 하는 메서드  
     void channelUp()   {  ++channel; }  // TV의 채널을 높이는 기능을 하는 메서드 
     void channelDown() { --channel; }   // TV의 채널을 낮추는 기능을 하는 메서드  
}

class TvTest { 
      public static void main(String args[]) { 
            Tv t;                  // Tv인스턴스를 참조하기 위한 변수 t를 선언       
            t = new Tv();          // Tv인스턴스를 생성한다. 
            t.channel = 7;         // Tv인스턴스의 멤버변수 channel의 값을 7로 한다. 
            t.channelDown();       // Tv인스턴스의 메서드 channelDown()을 호출한다. 
            System.out.println("현재 채널은 " + t.channel + " 입니다."); 
      } 
} 

 

class TvTest3 {
	public static void main(String args[]) {
		Tv t1 = new Tv();
		Tv t2 = new Tv();
		System.out.println("t1의 channel값은 " + t1.channel + "입니다.");
		System.out.println("t2의 channel값은 " + t2.channel + "입니다.");

		t2 = t1;        // t1이 저장하고 있는 값(주소)을 t2에 저장한다.
		t1.channel = 7;	// channel 값을 7로 한다.
		System.out.println("t1의 channel값을 7로 변경하였습니다.");

		System.out.println("t1의 channel값은 " + t1.channel + "입니다.");
		System.out.println("t2의 channel값은 " + t2.channel + "입니다.");
	}
}

 

2.5. 객체 배열

 

- 객체를 배열로 생성 할 수도 있다.

 

- 객체 배열은 참조 변수 배열이다.

 

- 즉, 객체 배열을 생성하는 것은 참조 변수들이 만들어진 것일 뿐 객체 배열의 각 요소에 객체를 생성해서 저장해야 한다.

 

Tv[] tvArr = new Tv[3]; // 참조변수 배열(객체 배열)을 생성

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

 

class TvTest4 {
	public static void main(String args[]) {
		Tv[] tvArr = new Tv[3]; // 길이가 3인 Tv객체 배열

		// Tv객체 배열의 각 요소에 Tv객체를 생성해서 저장
		for(int i=0; i < tvArr.length;i++) {
			tvArr[i] = new Tv();
			tvArr[i].channel = i+10; // tvArr[i]의 channel에 i+10을 저장
		}

		for(int i=0; i < tvArr.length;i++) {
			tvArr[i].channelUp();  // tvArr[i]의 메서드를 호출. 채널이 1증가
			System.out.printf("tvArr[%d].channel=%d%n",i,tvArr[i].channel);
		}
	} // main의 끝
}

 

2.6. 클래스의 또 다른 정의

 

1) 클래스 - 데이터와 함수의 결합

 

① 변수 - 하나의 데이터를 저장할 수 있는 공간

 

배열 - 같은 타입의 여러 데이터를 저장할 수 있는 공간

 

구조체 - 타입에 관계없이 서로 관련된 데이터들을 저장할 수 있는 공간

 

클래스 - 서로 관련된 데이터와 함수의 결합 (구조체 + 함수)

 

2) 클래스 - 사용자 정의 타입(User-defined type)

 

- 프로그래머가 직접 새로운 타입을 정의할 수 있다.

 

- 서로 관련된 값을 묶어서 하나의 타입으로 정의한다.

 

class Time{
    int hour;
    int minute;
    int second;
}

댓글