대학 동창과 직장동료의 이름, 전공(부서), 전화번호 정보를 저장하고 관리하는 프로그램을 만들 때
상속을 기반으로 중복되는 클래스 메소드들을 클래스 상속관계로 묶는 것을 예제로 만들어보겠습니다.
ex)
이름 : ㅇㅇㅇ
전공 : ㅇㅇㅇㅇㅇ
전화 : 000 - 0000 - 0000
이름 : ㅇㅇㅇ
부서 : ㅇㅇㅇㅇ
전화 : 000 - 0000 - 0000
우선 처음은 단순하게 관리 대상이 둘 이므로 두 개의 클래스를 정의하는 것부터 해볼게요.
먼저 대학 동창 목록을 정의하는 클래스입니다.
class UnivFriend{ // 대학 동창 목록
private String name; // 이름 문자열 선언
private String major; // 전공 문자열 선언
private String phone; // 전화번호 문자열 선언
public UnivFriend(String na, String ma, String ph) {
name = na;
major = ma;
phone = ph;
}
public void showInfo() {
System.out.println("이름 : " + name);
System.out.println("전공 : " + major);
System.out.println("전화 : " + phone);}
}
그 다음 회사 동료를 정의하는 클래스를 만들게요.
여기에서 showInfo()를 오버 라이딩 합니다.
class CompFriend{
private String name; // 이름 문자열 선언
private String depatment; // 전공 문자열 선언
private String phone; // 전화번호 문자열 선언
public CompFriend (String na, String de, String ph) {
name = na;
department = de;
phone = ph;
}
public void showInfo() {
System.out.println("이름 : " + name);
System.out.println("전공 : " + department);
System.out.println("전화 : " + phone);}
}
정보를 저장하는 공간을 만들기 위해 배열을 정의해줍니다.
여기에서도 showInfo()를 오버 라이딩 합니다.
UnivFriend[] ufrns = new UnivFriend[5]; // 5칸의 대학동창 ufrns 배열 생성
int unct = 0;
CompFriend[] cfrns = new CompFriend[5]; // 5칸의 직장동료 cfrns 배열 생성
int ccnt = 0;
배열 안에 차례차례 순서대로 대학과 직장의 목록에 값을 초기화합니다.
ufrns[unct++] = new UnivFriend("LEE", "COMPUTER","010-1234-1234");
ufrns[unct++] = new UnivFriend("PARK", "ELCTRONICS","010-4564-4564");
//unct 인수에 차례대로 숫자를 더해 배열에 순차적으로 값이 들어가게 선언한다.
cfrns[ccnt++] = new CompFriend("YOON", "R&D1","010-6262-6262");
cfrns[ccnt++] = new CompFriend("ANN", "R&D2","010-5656-5656");
이제 각 배열에 칸마다 들어있는 값들을 showInfo 메소드를 사용해서 순차적으로 출력합니다.
for(int i = 0 ; i < unct; i++ ) {
ufrns[i].showInfo();
System.out.println();
} // ufrns의 배열에 초기화된 값을 순차적으로 showInfo 메소드로 출력합니다.
for(int i = 0 ; i < ccnt; i++ ) {
ufrns[i].showInfo();
System.out.println();
}
이렇게 만들 경우 각 목록마다 코드배열이 겹쳐지는 것이 많기 때문에 코드를 절약하기 위해서 상속 관계로 묶는 방법을 생각해볼 수 있습니다. 그럼 두 클래스를 상속 관계로 묶어볼게요.
우선 동창과 직장동료 둘 다 항목이 같은 이름과 전화번호를 정의합니다.
연관된 일련의 클래스들에 대해 공통적인 규칙을 정의할 수 있어요.
class Friend {
protected String name;
protected String phone;
public Friend(String na, String ph) {
name = na;
phone = ph;
}
public void showInfo() {
System.out.println("이름: " + name);
System.out.println("전화: " + phone);
}
}
공통적으로 중복되는 클래스를 super을 통해서 받고 그 아래의 자식 클래스로 직장동료의 부서를 추가합니다.
class CompFriend extends Friend {
private String department;
public CompFriend(String na, String de, String ph) {
super(na, ph);
department = de;
}
public void showInfo() {
super.showInfo();
System.out.println("부서: " + department);
}
}
그 다음에는 동창들의 목록을 위해 똑같이 부모 클래스인 Friend 클래스에서 super 키워드로 메소드를 상속 받아 전공 출력을 추가합니다.
class UnivFriend extends Friend {
private String major;
public UnivFriend(String na, String ma, String ph) {
super(na, ph);
major = ma;
}
public void showInfo() {
super.showInfo();
System.out.println("전공: " + major);
}
}
이제 메인 클래스에서 출력을 준비합니다.
아까의 예제에서 동창과 직장동료의 배열을 각각 5개씩 준비했다면, 이번에는 동창과 직장동료를 모두 한 배열에 담기 위해 부모 클래스인 Friend 클래스에 10개의 배열을 준비합니다. (비어있는 참조변수 10개를 만든 것과 같은 것)
0부터 9까지의 인덱스가 만들어집니다.
Friend[] frns = new Friend[10];
int cnt = 0;
그 다음, 배열에 각각 super 키워드로 상위 부모 클래스를 참조한 자식 클래스의 자료를 해당 배열에 쏙쏙 넣어줍니다.
new UnivFriend 할 때마다 한 칸씩 데이터가 추가 됩니다. cnt++ 이므로 먼저 배열에 접근한 이후에 1을 다시 추가하는 것입니다.
frns[cnt++] = new UnivFriend("LEE", "Computer", "010-333-555");
frns[cnt++] = new UnivFriend("SEO", "Electronics", "010-222-444");
frns[cnt++] = new CompFriend("YOON", "R&D 1", "02-123-999");
frns[cnt++] = new CompFriend("PARK", "R&D 2", "02-321-777");
그리고 이제 모든 동창과 동료의 정도 전체를 for문을 통해 출력합니다.
for(int i = 0; i < cnt; i++) {
frns[i].showInfo(); // 오버라이딩 한 메소드가 호출된다.
System.out.println();
여기까지 메소드 오버라이딩과 상속을 이용한 코드의 변형을 살펴보았습니다.
다음번에 또 다른 예제로 확인해볼게요.
'자바 > 자바 코드 예제 만들기' 카테고리의 다른 글
자바 기초 예제 문제 7. 랜덤 숫자 맞추기 게임 (0) | 2022.11.01 |
---|---|
자바 기초 예제문제 6. equals() 메소드를 오버라이딩 해서 좌표 비교 (공부중) (0) | 2022.11.01 |
자바 기초 예제문제 4. 입력한 문자열 비교해서 비교 결과 출력하기 (0) | 2022.10.28 |
자바 기초 예제문제 3. 제곱근을 구하기 (2의 n승 구하기) (0) | 2022.10.27 |
자바 기초 예제 문제 2. 자바로 소수값 출력하기 (0) | 2022.10.26 |