220323 객체형변환2, 객체배열
흐엑... 정리가 밀렸당...

자바 프로젝트에 정신이 팔려서 수업 정리를 소홀히 했는데,
그랬다간 프로젝트 기간(2주) 동안 한도 끝도 없이 미뤄질 것 같아 우선 정리부터 해야겠다.
참고로 달거북씨의 자바 프로젝트 주제는 '방탈출 게임'이다.
이것저것 많이 조사하며 방황했는데, 이미 수업 끝내고 취직준비 중인 친구님 왈,
어차피 앞으로 있을 프로젝트는 계속 웹페이지 만드는 거라고 하고 싶은 거 하라고 해서 게임을 만들어 보기로 했다.
+
시험공부한다고 늦게 잤다가 지각하고,
프로젝트 조금만 더 해야지 하다가 밤 샜다가 지각하고 지난 한 주가 아주 난리법석이었다.
때문에 장기적인 안목으로 생활패턴을 바꾸기로 했다.
일찍 자고 일찍 일어나기로... 핳
새벽까지 공포라디오 들으면서 코딩하고 수업 정리하는 게 낙이었지마나 할 수 없지ㅠ
- 하고는 오늘 밤샘. 핳
지난 주중에 제대로 못 잔 거 주말에 몰아 잤더니 잠이 오질 않았다. 나는 세 시간 넘게 노력했어.
1. 객체형변환
Unit u1 = army;
Unit u2 = navy;
Unit u3 = airforce;
u1.attack();
u2.attack();
u3.attack();
// 부모클래스(Unit)가 지니고 있는 기능이 아니므로 에러
u1.tank();
u2.nucleus();
u3.bumbing();
→ 상속관계의 객체를 부모 형태로 변환하면, 클래스의 종류를 구분하지 않고 일괄된 기능을 호출할 수 있다. 객체가 상위클래스의 형태로 형변환 되더라도 Overeride된 자신의 기능은 잃지 않는다.
→ 하지만 추가적으로 구현한 기능은 사용할 수 없게 되므로, 원래의 기능을 다시 사용할 수 있는 방법이 필요해졌다.
1-1. 명시적 형변환
- 부모 클래스의 객체를 자식 클래스 형태로 변환하는 것
- 형변환을 위해서는 다음과 같이 변환할 클래스 이름을 명시적으로 지정해 주어야 한다.
ChildClass child1 = new ChildClass();
ParentClass parent = child1; // 암묵적 형변환
ChildClass child2 = (ChildClass)parent; // 명시적 형변환
2. 객체배열
- 일반 데이터 타입의 배열과 동일한 개념으로, 같은 클래스 객체 여러 개를 그룹화 할 수 있다.
- 일반 데이터 형의 배열 생성과 객체 배열 생성 비교
// 일반 데이터형의 배열
int[] data = new int[3];
// 객체 배열의 경우
Army[] data = new Army[3];
- 각 경우에 대한 배열의 요소 할당 처리
→ 일반 데이터 형은 단순히 값을 대입하지만, 객체 배열은 'new'를 사용하여 객체를 할당해야 한다.
// 일반 데이터 형 배열의 경우
data[0] = 10;
data[1] = 20;
data[2] = 35;
// 객체 배열의 경우
Army a1 = new Army();
data[0] = new Army();
data[1] = new Army();
data[2] = new Army();
2-1. 정리
- 객체 형변환
→ 같은 부모 클래스에서 파생된 서로 다른 자식 클래스의 객체들은 부모 형태로 암묵적 형변환 되어 일관된 형식으로 사용 가능하다. - 객체 배열
→ 동일한 클래스의 객체는 배열로 묶어서 여러 개를 한꺼번에 제어할 수 있다.
2-2. 부모 클래스의 배열에 자식 클래스의 객체를 넣기
- 배열의 생성이 부모 클래스로 지정되었을 경우, 모든 자식 클래스의 객체들은 그 배열에 포함될 수 있다.
Unit[] unit = new Unit[3];
// 배열의 요소 할당과정에서 암묵적 형변환이 이루어진다.
unit[0] = new Army();
unit[1] = new Navy();
unit[2] = new AirForse();
▶ 형태만 배열이 되었을 뿐 업캐스팅과 동일한 기능
2-3. 원래의 기능으로 복귀하기
- 배열의 각 요소가 확장한 기능을 사용하기 위해서는 원래의 클래스 형태로 명시적 형변환이 이루어져야 한다.
- 하지만 반복적으로 처리되는 과정에서 몇 번째 요소가 어떤 클래스에서 최초 생성되었는지를 판단하기란 쉽지 않다.
- instanceof 연산자
→ instanceof 연산자는 어떤 객체에 대한 출처를 판단하여 boolean형으로 결과를 반환한다.
if(units[0] instanceof Army){
Army temp1 = (Army)units[0];
temp1.tank();
}
2022.03.06 - [이론/자바 기초] - JAVA 그게 뭐야? 13. 상속2
JAVA 그게 뭐야? 13. 상속2
전편 상속에서 이어지는 내용이다:) https://turtlemoon.tistory.com/13 JAVA 그게 뭐야? 12. 변수와 상속1 1. 변수 변수의 종류 - 지역변수(Local Variable) : 메소드 영역에 선언된 변수 - 인스턴스 변수(Instan..
turtlemoon.tistory.com
▶ 명시적 형변환은 다운캐스팅 부분 참고!
▶ instanceof 내용도 있음!
▶ 아래 예제의 부모 클래스와 자식 클래스는 상속에서 했던 그대로 가지고 옴