Programming Language/Java

[Java] 객체지향언어(1) | 클래스와 객체, 인스턴스, 객체 배열

성니 2021. 1. 24. 22:29

http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788994492032&orderClick=LEa&Kc=

 

Java의 정석 - 교보문고

자바의 기초부터 객제지향개념을 넘어 실전활용까지 수록한『Java의 정석』. 저자의 오랜 실무경험과 강의한 내용으로 구성되어 자바를 처음 배우는 초보자들의 궁금한 점을 빠짐없이 담고 있

www.kyobobook.co.kr


[객체지향언어]

* 객체지향언어란?

기존의 프로그래밍 언어에 몇가지 새로운 규칙을 추가한 언어이다.

절차적 언어에 익숙한 프로그래밍 습관을 객체지향적으로 바꿔야 할 것!

 

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

새로운 코드를 작성할 때 기존의 코드를 이용해서 쉽게 작성할 수 있음

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

코드관의 관계를 이용하여 코드를 쉽게 변경할 수 있음

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

제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지함

코드의 중복을 제거해서 코드의 불일치로 인한 오류를 방지할 수 있음

 

 


[클래스와 객체]

* 클래스와 객체의 정의와 용도

클래스의 정의 : 객체를 정의해 놓은 것. 객체의 설계도 또는 틀.
클래스의 용도 : 객체를 생성하는데 사용되고, 클래스에 정의된 대로 생성됨.

예 : 스마트폰 설계도(클래스)는 스마트폰이라는 제품(객체)를 정의 한 것.

 

객체의 정의 : 실제로 존재하는 것. 사물 또는 개념.
객체의 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름

객체지향이론에서는 사물과 같은 유형적인 것과 개념이나 논리와 같은 무형적인 것 모두 객체로 간주한다.

 

클래스는 객체를 생성하는데 사용될 뿐이지 객체 그 자체는 아니다.

우리가 원하는 기능의 객체를 사용하기 위해서는 클래스로부터 객체를 생성하는 과정이 선행되어야 한다.

 

JDK(Java Development Kit)에서는 수많은 클래스(Java API)를 제공하고 있다.

 

 

* 객체와 인스턴스

- 클래스의 인스턴스화(instantiate)

클래스로부터 객체를 만드는 과정

- 클래스의 인스턴스(instance)

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

 

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

 

 

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

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

예 : 속성 - 스마트폰 크기, 길이, 높이, 색상 등

     기능 - 켜기, 끄기, 볼륨 업, 볼륨 다운 등

 

 

* 인스턴스의 생성과 사용

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

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

 

 

class smartphone { 
	// 스마트폰의 속성(멤버변수)
    String color;		// 색상
	boolean power;		// 전원상태(on/off)
	int brightness;		// 화면 밝기
	
	// smartphone의 기능(메서드)
	void power() {power = !power;}		// 스마트폰을 켜거나 끄는 메서드
	void brightnessUp() {++brightness;}   // 스마트폰의 화면 밝기를 높이는 메서드
	void brightnessDown() {--brightness;} // 스마트폰의 화면 밝기를 낮추는 메서드
}
public class test1 {
	public static void main(String[] args) {
		smartphone s1 = new smartphone();
		smartphone s2 = new smartphone();
		System.out.println("s1의 brightness값은 " + s1.brightness + "입니다.");
		System.out.println("s2의 brightness값은 " + s2.brightness + "입니다.");
			
		s1.brightness = 10;
		System.out.println("s1의 brightness값을 10으로 변경하였습니다.");
			
		System.out.println("s1의 brightness값은 " + s1.brightness + "입니다.");
		System.out.println("s2의 brightness값은 " + s2.brightness + "입니다.");
	}
}

 

코드 실행 결과

스마트폰의 속성과 기능을 활용하여 만든 예제이다.

 

 

* 객체 배열

객체 배열 안에는 객체가 저장되는 것이 아니라, 객체의 주소가 저장된다.

객체 배열은 참조변수들을 하나로 묶은 참조 변수 배열이라고 보면 된다.

 

주의 !

객체를 생성하고 객체 배열의 각 요소에 저장하는 것을 잊지 말자! 배열만 생성한다고 끝나는 게 아니다.

 

 

- 객체 배열의 생성

smartphone[] smartphoneArr = new smartphone[3];	// 참조변수 배열을 생성
// 객체를 생성해서 배열의 각 요소에 저장
smartphoneArr[0] = new smartphone();
smartphoneArr[1] = new smartphone();
smartphoneArr[2] = new smartphone();

 

 

- 객체 배열의 초기화

배열의 초기화 블럭 사용

smartphone[] smartphoneArr = {new smartphone(), new smartphone(), new smartphone()};

 

for문 사용

smartphone[] smartphoneArr = new smartphone[100];

for (int i = 0; i < smartphoneArr.length; i++){
	smartphoneArr[i] = new smartphone();
}

 

 

public class Hello {
	public static void main(String[] args) {
		smartphone[] smartphoneArr = new smartphone[3];	// 길이가 3인 객체 배열
		// 스마트폰 객체를 생성해서 스마트폰 배열의 각 요소에 저장
		for (int i = 0; i < smartphoneArr.length; i++) {
			smartphoneArr[i] = new smartphone();
			smartphoneArr[i].brightness = i + 10; // smartphoneArr[i]의 brightness에 i+10을 저장
		}
		for (int i = 0; i < smartphoneArr.length; i++) {
			smartphoneArr[i].brightnessUp(); // smartphoneArr[i]의 메서드 호출, 밝기 1 증가
			System.out.printf("smartphoneArr[%d].brightness=%d\n", i, smartphoneArr[i].brightness);
		}
	}
}
class smartphone { 
	// smartphone의 속성(멤버변수)
	String color;		// 색상
	boolean power;		// 전원상태(on/off)
	int brightness;		// 화면 밝기
	
	// smartphone의 기능(메서드)
	void power() {power = !power;}			// smartphone을 켜거나 끄는 메서드
	void brightnessUp() {++brightness;}		// smartphone의 화면 밝기를 높이는 메서드
	void brightnessDown() {--brightness;}	// smartphone의 화면 밝기를 낮추는 메서드
}

 

객체 배열 예제 코드

 

728x90