31일차 - 2023.2.8

문우림·2023년 2월 8일
0

Java

목록 보기
15/23

1. 형 변환

1-1. 자료형 데이터 타입 형 변환(복습)

int a = 0;
	double d = a; //자동 형 변화
	
	a = (int)d; //강테 형 변환, 명시적 형 변환
	

형 변환 2종류

  • 자동 형 변환
  • 강제 형 변환

형 변환 원칙
연산 할 때 형 변환 일어남.

1-2. 참조형 데이터 타입 형 변환

class A {
	
}
class B extends A {
	
}
public class JavaTest {

	public static void main(String[] args) {
		A aaa = new B();
	//	A aaa = (A) new B();
		
	//	B bbb = new A( ); 오류
		B bbb = (B) new A();
	//		강제 형 변환
	// 		객체가 생성되 있어야만 강제 형 변환이 가능 -> new B( );
	}

}

instanceof 연산자

객체 insranceof 클래스 명

  • 해당 객체 주소 찾아가서 클래스가 메모리에 올라가 있는지 확인.
  • 형 변환 가능 여부를 확인하며, true or false로 결과를 반환.
  • 객체 타입을 확인하는 연산자.
  • 주로 상속 관계에서 부모 객체인지 자식 객체인지 확인 시 사용.
class Box {
	public void simpleWrap() {
		System.out.println("Simple Wrapping");
	}
}

class PaperBox extends Box {
	public void paperWrap() {
		System.out.println("Paper Wrapping");
	}
}

class GoldPaperBox extends PaperBox {
	public void goldWrap() {
		System.out.println("Gold Wrapping");
	}
}

public class InstanceOf {
public static void wrapBox(Box box) { //(Box box)는 다형성이 적용되어 있음
	if(box instanceof GoldPaperBox) {
		((GoldPaperBox) box).goldWrap();
	}
	else if(box instanceof PaperBox) { //box의 주소 찾아가서 PaperBox가 메모리에 있는지 확인
		((PaperBox) box).paperWrap();
		//PaperBox p = (PaperBox)box; 형 변환 기능 
		//PaperBox클래스 안의 paperWrap메소드 호출 하고 싶어서
	}
	else {
		box.simpleWrap();
	}
}
	public static void main(String[] args) {
		Box box1 = new Box();
		PaperBox box2 = new PaperBox();
		GoldPaperBox box3 = new GoldPaperBox();
		
		wrapBox(box1);
		wrapBox(box2);
		wrapBox(box3);
		
	}

}

[결과]
Simple Wrapping
Paper Wrapping
Gold Wrapping
  • (Box box)는 다형성이 적용되어 있음
    = 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있음
    ❗함수 파라미터에 다형성을 적용시키지 않으면 각각 타입별 로 함수를 생성해야 함.
  • ((PaperBox) box).paperWrap();
    해당 클래스의 해당 함수를 출려하고 싶어서 형 변환 시킴.

상속 활용

인맥 관리 프로그램(두 클래스를 상속 관계로 묶음)

class Friend {
	protected String name;
	protected String phone;
	
	public Friend(String name, String phone) {
		this.name = name;
		this.phone = phone;
	}
	public void showInfo() {
		System.out.println("이름: " + name);
		System.out.println("전화: " + phone);
	}
}
class UnivFriend extends Friend {
	private String major;
	
	public UnivFriend(String name, String phone, String major) {
		super(name, phone); //부모 클래스 생성자 호출
		this.major = major;
	}
	@Override
	public void showInfo() {
		super.showInfo(); //부모 클래스 함수 호출
		System.out.println("전공: " + major);
	}
}
class ComFriend extends Friend{
	private String department;
	
	public ComFriend(String name, String phone, String department) {
		super(name, phone); //부모 클래스 생성자 호출
		this.department = department;
	}
	@Override
	public void showInfo() {
		super.showInfo(); // 부모 클래스 함수 호출
		System.out.println("부서: " + department);
	}
}

public class PersonInfoIherit {

	public static void main(String[] args) {
		Friend[] frns = new Friend[10];
		int cnt = 0;
		
		//다형성 적용. 부모 클래스  타입의 참조 변수
		frns[cnt++] = new UnivFriend("LEE", "Computer", "010-333-555");
		frns[cnt++] = new UnivFriend("SEO", "Electronics", "010-222-444");
		frns[cnt++] = new ComFriend("YOON", "R&D 1", "02-123-999");
		frns[cnt++] = new ComFriend("PARK", "R&D 2", "02-321-777");
		
		for(int i = 0; i < cnt; i++) {
			frns[i].showInfo(); //오버라이딩 한 메소드가 호툴된다.
			System.out.println();
		}
	}

}

[결과]
이름: LEE
전화: Computer
전공: 010-333-555

이름: SEO
전화: Electronics
전공: 010-222-444

Object클래스(java.lang패키지)

모든 클래스는 Object클래스를 상속하고 있다.
조상 클래스.

컴파일러가 자동으로 해주는 것
①디폴트 생성자
②super( )
③Obect클래스 상속(extends Object)new!

Object클래스를 상속하면...

  • Object클래스의 메소드 와 변수를 사용할 수 있게된다.
  • Object클래스의 메소드 오버라이딩도 적용 가능 .

0개의 댓글