티스토리 뷰

instanceof 란? 객체의 타입을 알아내는 키워드 입니다.


A instanceof B : A객체가 B 클래스의 객체가 맞으면 true를 반환하고, 틀리면 false를 반환한다.


instanceof 키워드에 대한 기본적인 이론을 마치고 실습을 통해 공부하겠습니다.



기본적인 instanceof 키워드에 대한 이론과 사용 방법을 담은 메인(main) 클래스

public class ExampleInstanceof {
	public static void main(String[] args) {
		A a1 = new B();
		A a2 = new C();
		
		B b1 = new B();
		
		// 객체가 무엇으로 이루어져 있는지 판단하는 instanceof 연산자
		// A instanceof B => A 객체가 B 클래스로 이루어져 있는가? (= 부를 수 있는가?)
		// instanceof 키워드는 is-a 관계가 성립한다면 true 반환
		
		if(a1 instanceof B){
			System.out.println("a1 객체는 B클래스라고 부를 수 있다.");
		}
		if(a2 instanceof C){
			System.out.println("a2 객체는 C클래스라고 부를 수 있다.");
		}
		if(b1 instanceof A){
			System.out.println("b1 객체는 A클래스라고 부를 수 있다.");
		}		
	}
}
class A {}
class B extends A {}
class C extends B {}
class D extends B {}



배열 이란? 같은 타입의 변수를 하나의 묶음으로 모아 놓은 것이다.

자바에서의 배열은 객체이다.


* 사용하는 이유: 많은 양의 동일한 타입의 데이터를 쉽게 관리하기 위하여 사용한다.



˚ 배열 사용시 for - each문 (반복문)을 사용한다.

for(자료형 변수: 배열 이름){
     // 반복문장 
}

반복이 진행되면서 변수에는

배열의 첫 번째 원소부터 마지막 원소까지 차례대로 대입


˚ 사용자가 배열의 크기 지정

int size;
Scanner sc = new Scanner(System.in);
size = sc.nextInt();                             // int(정수)형 타입으로 입력받는다.
int[] a = new int[size];                       // 변수로 배열 크기 지정

자바에서는 배열의 크기를 사용자가 입력할 수도 있다.



간단하게 배열과 for-each문에 대해 알아보았고, 실습을 통해 공부하겠습니다.


배열을 사용하고, for - each문을 사용한 메인 클래스

public class ExampleArrayForEach{
	public static void main(String[] args) {
		// 배열 만들기
		int[] score_arr = new int[10];

		// score_arr도 객체이기 때문에 멤버변수나 메소드를 사용할 수 있다.
		// * length : 배열의 길이
		for (int i = 0; i < score_arr.length; i++) {
			score_arr[i] = (i + 1) * 10;
		}

		for (int i = 0; i < score_arr.length; i++) {
			System.out.println(score_arr[i]);
		}

		// for - each
		// 자료구조에서 원하는 데이터를 뽑아낼 때 많이 사용된다.
		// 매우 중요하다.
		// 종료 시기 : 더이상 꺼낼 데이터가 없을 때 종료된다.

		// for(변수 : 자료구조){
		// 자료구조에 있는 아이템을 순서대로 하나씩 꺼내서 변수에 대입시킨다.
		// }

		// 모든 데이터를 꺼내서 검사할때 마다 많이 사용된다.
		System.out.println();
		System.out.println("for each 문장");
		for (int i : score_arr) {
			System.out.println(i);
		}
	}
}





다형성에 대해 공부하였으면 Upcasting, Downcasting을 알고있습니다.


배열을 사용하여 shape 형태의 배열로 만들어 놓은 것에 Upcasting과 Downcasting을 사용하여 

Circle, Square 객체를 만들었고, instanceof 키워드를 사용하여 알아보도록 하겠습니다.

public class ExampleArrayInstanceof {
	public static void main(String[] args) {
		Shape[] arr_shape = new Shape[5]; // Shape형태의 배열로 만든것이다. 객체를 생성한 것이 아니기
											// 때문에 컴파일 에러가 없다

		// UpCasting이 일어나면서 가능하다.
		arr_shape[0] = new Circle(); // 0번째 Shape = new Circle();
		arr_shape[1] = new Square(); // 1번째 Shape = new Square();
		arr_shape[2] = new Circle(); // 2번째 Shape = new Circle();
		arr_shape[3] = new Square();
		arr_shape[4] = new Circle();
		
		// 객체가 무엇으로 이루어져 있는지 판단하는 instanceof 연산자
		// A instanceof B => A 객체가 B 클래스로 이루어져 있는가? (= 부를 수 있는가?)
		// instanceof 키워드는 is-a 관계가 성립한다면 true 반환
		
		for(Shape s : arr_shape){
			if(s instanceof Circle){
				Circle c = (Circle)s;
				System.out.println(c);
			}else{
				Square sq = (Square)s;
				System.out.println(sq);
			}
		}
		System.out.println();
		
		for(Shape s: arr_shape){
			System.out.println(s);
		}
	}
}

abstract class Shape {   }

class Circle extends Shape {
	@Override
	public String toString() {
		return "원입니다";
	}
}

class Square extends Shape {
	@Override
	public String toString() {
		return "사각형입니다";
	}
}
반응형
LIST
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함