객체배열
예제
class Person{
//Field
private String name;
private int age;
//Constructor
Person(){}
Person(String name, int age){
this.name = name;
this.age = age;
}
//Method
public String getName() {return name;}
public void setName(String name) {
this.name = name;
}
public int getAge() {return age;}
public void setAge(int age) {
this.age = age;
}
}
public class oop_InheritanceSample4 {
public static void main(String[] args) {
// [1] : 객체생성
Person[] pa = new Person[5];
pa[0] = new Person("홍길동", 21);
pa[1] = new Person("박길동", 22);
pa[2] = new Person("김길동", 23);
pa[3] = new Person("이길동", 24);
pa[4] = new Person("장길동", 25);
// [2] : 출력
for(int i = 0; i < pa.length; i++ ) {
System.out.println("객체주소 : " + pa[i] + "");
System.out.println(pa[i].getName() + pa[i].getAge() + "살");
System.out.println();
}
}
}
객체주소 : java100.part1.ex01.Person@15db9742
홍길동21살
객체주소 : java100.part1.ex01.Person@6d06d69c
박길동22살
객체주소 : java100.part1.ex01.Person@7852e922
김길동23살
객체주소 : java100.part1.ex01.Person@4e25154f
이길동24살
객체주소 : java100.part1.ex01.Person@70dea4e
장길동25살
이 예제는 객체배열, 즉 참조형 타입의 배열을 만들고 사용하는 방법에대한 예제이다. 간단하게 정리하면 Person class의 인스턴스 즉 객체를 여러 개 만들고, 이들을 하나의 배열에 저장하여 관리하는 방법을 보여준다.
객체 배열은 기본형 데이터타입의 배열과 마찬가지로 선언하고 사용할 수 있다. 그러나 주의할 점은 객체배열이라 하더라도 실제로 배열에 저장되는 것은 객체 자체가 아니라 객체에 대한 참조(즉, 객체의 메모리 주소)라는 점이다. 따라서 배열을 통해 객체를 참조하면, 원래 객체에 대한 모든 변경이 그대로 반영된다.
이 예제 코드에서는 Person객체를 생성하고 각각의 이름과 나이를 설정한 다음, 이들을 Person타입의 배열에 저장한다. 그 후에 배열을 순회하면서 각 Person 객체의 정보를 출력한다.
여기서 더 나아가 생각해볼수 있는 것은, 이러한 방식은 객체지향 프로그래밍의 핵심적인 개념인 다형성을 활용한 상황을 만들 수 있다는 것이다. 예를 들어, Person class를 상속받아 Student, Employee등의 sub class를 만든다면, Person 타입의 배열에 이들 sub class의 인스턴스를 저장하고 관리할 수 있다. 이렇게 되면, 각기 다른 타입의 객체들을 하날 배열에서 관리하면서, 각각에 적합한 동작을 수행하도록 만드는 것이 가능해진다.
다형성 활용
예제
class Person{
//Field
private String name;
private int age;
//Constructor
Person(){}
Person(String name, int age){
this.name = name;
this.age = age;
}
//Method
public String getName() {return name;}
public void setName(String name) {
this.name = name;
}
public int getAge() {return age;}
public void setAge(int age) {
this.age = age;
}
public String introduce() {
return "안녕하세요, 제 이름은 " + name + "이며," + age + "살 입니다.";
}
}
class Student extends Person{
private String major;
Student(String name,int age, String major){
super(name, age);
this.major = major;
}
@Override
public String introduce() {
return super.introduce() + " 저는" + major + "를 전공하는 학생입니다.";
}
}
class Employee extends Person{
private String department;
Employee(String name,int age, String department){
super(name, age);
this.department = department;
}
@Override
public String introduce() {
return super.introduce() + " 저는 " + department + "에서 일하는 직원입니다.";
}
}
public class oop_InheritanceSample4 {
public static void main(String[] args) {
// [1] : 객체생성
Person[] pa = new Person[3];
pa[0] = new Person("홍길동", 21);
pa[1] = new Student("박길동", 22, "컴퓨터 공학");
pa[2] = new Employee("김길동", 23, "개발팀");
// [2] : 출력
for(Person person : pa) {
System.out.println(person.introduce());
}
}
}
안녕하세요, 제 이름은 홍길동이며,21살 입니다.
안녕하세요, 제 이름은 박길동이며,22살 입니다. 저는컴퓨터 공학를 전공하는 학생입니다.
안녕하세요, 제 이름은 김길동이며,23살 입니다. 저는 개발팀에서 일하는 직원입니다.
이 코드에서 student와 Employee 클래스는 Person 클래스를 상속받는다.
Student와 Employee 클래스는 각각 introduce 메서드를 Override하여 자신의 전공이나 부서 정보를 추가로 정의하였다.
main Method에서는 Person 타입의 배열에 Person, Studnet, Employee 객체를 저장한다. 그리고 각 객체의 Introduce메서드를 호출하여 그 객체를 출력한다.
Person타입의 배열을 사용하여 여러 타입의 객체를 통일적으로 다룰 수 있으며, 각 객체가 자신에 맞는 동작을 수행할 수 있다.

'Java > JAVA 100 문제 풀이' 카테고리의 다른 글
| 자바 part.4 문제풀이 - 다중 상속을 가능하게 하는 인터페이스(Interface) (0) | 2023.07.26 |
|---|---|
| 자바 part.4 문제풀이 - 추상 클래스(Abstract Class)개념, 필요 (0) | 2023.07.26 |
| 자바 part.3 문제풀이 - 상속과 캡슐화 (0) | 2023.07.25 |
| 자바 part.3 문제풀이 - Getter와 Setter를 이용한 클래스 캡슐화 (0) | 2023.07.25 |
| 자바 part.3 문제풀이 - 상속과 메서드 오버라이딩 이해하기 (0) | 2023.07.25 |