본문 바로가기
Web

[Java] 상속 inheritance 을 활용한 정보관리 시스템 만들기

by DuncanKim 2022. 6. 13.
728x90

[Java] 상속 inheritance 을 활용한 정보관리 시스템 만들기

 

상속은 객체 지향에서 중요한 개념이다.

매번 클래스에 같은 내용을 넣지 않고, 기존의 클래스에 추가하고 싶은 내용이 있는데, 각기 다른 특성을 가질 경우

예를 들어 S클래스라는 자동차의 외관 설계를 하는 클래스가 있다고 치자.

외관은 공통인데 엔진이 다를 수 있지 않은가.

 

디젤 엔진을 가진 S클래스와 가솔린 엔진을 가진 S클래스를 각각 만들고 싶다면,

 

디젤 S클래스 extends S클래스

가솔린 S클래스 extends S클래스

 

해서 엔진 부분만 각각 바꾸어 주면 된다.

 

이렇게 해서 얻는 이득은,

각각의 디젤 S클래스, 가솔린 S클래스의 내부 코드에서 S클래스의 외관 설계를 하는 코드가 들어가지 않아도 된다는 코드 작성의 효율성

외관이 마음에 안들어 바꿔야 한다면 S클래스라는 부모클래스만 바꿔주면 되는 유지보수성을 얻을 수 있다.

 

아래에서는 Person이라는 부모 클래스를 상속하여 Student와 Teacher이라는 클래스를 만들고,

메인 클래스에서 정보관리 시스템을 만든 것이다.

 

Student와 Teacher이 가지는 공통의 요소(이름, 나이, 키, 몸무게)는 부모 클래스인 person에 두어 공유하게 하고,

Student가 가지는 학번, 학년, 학점을 변수로 추가하고 데이터를 보여주는 show()함수를 구성했고,

Teacher이 가지는 교직원 번호, 월급, 연차를 변수로 추가하고 데이터를 보여주는 show()함수를 구성했다.

 

get, set함수를 자동으로 만들어주는 기능이 이클립스에 있다.

getters setters를 누르면 자동으로 생성해준다.

심지어 생성자도 자동으로 만들어준다.

 

상속을 활용해서 아래의 4개의 클래스를 만들면, 정보관리 시스템이 만들어진다.

배열을 활용하면 정보들을 저장할 수 있는 것이다.

 

기본적으로 이런 시스템이 고도화되어 정보관리 시스템으로 존재한다고 한다.

 

 

 

1. Person 클래스

public class Person {

	private String name;
	private int age;
	private int height;
	private int weight;
	
	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 int getHeight() {
		return height;
	}
	public void setHeight(int height) {
		this.height = height;
	}
	public int getWeight() {
		return weight;
	}
	public void setWeight(int weight) {
		this.weight = weight;
	}
	
	public Person(String name, int age, int height, int weight) {
		super();
		this.name = name;
		this.age = age;
		this.height = height;
		this.weight = weight;
	}
	
}

 

 

 

2. Teacher 클래스

public class Teacher extends Person{

	private String teacherId;
	private int monthSalary;
	private int workedYear;
	
	public String getTeacherId() {
		return teacherId;
	}
	public void setTeacherId(String teacherId) {
		this.teacherId = teacherId;
	}
	public int getMonthSalary() {
		return monthSalary;
	}
	public void setMonthSalary(int monthSalary) {
		this.monthSalary = monthSalary;
	}
	public int getWorkedYear() {
		return workedYear;
	}
	public void setWorkedYear(int workedYear) {
		this.workedYear = workedYear;
	}
	
	public Teacher(String name, int age, int height, int weight, String teacherId, int monthSalary, int workedYear) {
		super(name, age, height, weight);
		this.teacherId = teacherId;
		this.monthSalary = monthSalary;
		this.workedYear = workedYear;
	}
	
	public void show() {
		System.out.println("-----------------");
		System.out.println("교사 이름 : " + getName());
		System.out.println("교사 나이 : " + getAge());
		System.out.println("교사 키 : " + getHeight());
		System.out.println("교사 몸무게 : " + getWeight());
		System.out.println("교직원 번호 : " + getTeacherId());
		System.out.println("교사 월급 : " + getMonthSalary());
		System.out.println("교사 연차 : " + getWorkedYear());
		
	}
}

 

 

3. Student 클래스

public class Student extends Person {

	private String studentId;
	private int grade;
	private double GPA;
	public String getStudentId() {
		return studentId;
	}
	public void setStudentId(String studentId) {
		this.studentId = studentId;
	}
	public int getGrade() {
		return grade;
	}
	public void setGrade(int grade) {
		this.grade = grade;
	}
	public double getGPA() {
		return GPA;
	}
	public void setGPA(double gPA) {
		GPA = gPA;
	}
	
	public Student(String name, int age, int height, int weight, String studentId, int grade, double gPA) {
		//상속받은 클래스의 매개변수를 가진 super 생성됨.
		super(name, age, height, weight);
		this.studentId = studentId;
		this.grade = grade;
		GPA = gPA;
	}
	
	public void show() {
		System.out.println("--------------------");
		System.out.println("학생 이름 : " + getName());
		System.out.println("학생 나이 : " + getAge());
		System.out.println("학생 키 : " + getHeight());
		System.out.println("학생 몸무게 : " + getWeight());
		System.out.println("학번 : " + getStudentId());
		System.out.println("학년 : " + getGrade());
		System.out.println("학점 : " + getGPA());
		
	}
}

 

 

4.  Main 클래스

(주석 안의 내용은 스캐너를 쓰지 않고 시험적으로 만든 것이다.)

import java.util.Scanner;

public class Inheritance {

	public static void main(String[] args) {
		/*
		Student student1 = new Student("홍길동", 20, 175, 70, "20170101", 2, 4.5);
		Student student2 = new Student("이순신", 19, 185, 71, "20170102", 2, 4.5);
		student1.show();
		student2.show();
		
		Teacher teacher1 = new Teacher("존", 25, 180, 100, "adb232", 3000000, 5);
		teacher1.show();
		
		
		// 배열로 클래스를 활용하는 방법
		Student[] students = new Student[100];
		for(int i = 0; i < 100; i++) {
			students[i] = new Student("홍길", 20, 175, 70, i + "", 1, 4.5);
			students[i].show();
		}
		*/
		
		Scanner sc = new Scanner(System.in);
		System.out.print("총 몇 명의 학생이 존재합니까? : ");
		int number = sc.nextInt();
		Student[] students = new Student[number];
		for(int i = 0; i < number; i++) {
			
			String name;
			int age; 
			int height;
			int weight;
			String studentId;
			int grade; 
			double gPA;
			System.out.print("학생의 이름을 입력하세요 : ");
			name = sc.next();
			System.out.print("학생의 나이를 입력하세요 : ");
			age = sc.nextInt();
			System.out.print("학생의 키를 입력하세요 : ");
			height = sc.nextInt();
			System.out.print("학생의 몸무게를 입력하세요 : ");
			weight = sc.nextInt();
			System.out.print("학생의 학법을 입력하세요 : ");
			studentId = sc.nextLine();
			System.out.print("학생의 학년을 입력하세요 : ");
			grade = sc.nextInt();
			System.out.print("학생의 학점을 입력하세요 : ");
			gPA = sc.nextDouble();
			students[i] = new Student(name, age, height, weight, studentId, grade, gPA);		
			
		}
		for(int i = 0; i < number; i++) {
			students[i].show();
		}
		sc.close();
	}
}
728x90

'Web' 카테고리의 다른 글

[Java] 다형성(Polymorphism) 알아보기  (0) 2022.06.13
[Java] 추상, 인터페이스  (0) 2022.06.13
[Java] 클래스 변수와 인스턴스 변수의 차이  (0) 2022.06.13
[Java] Java 자바 final  (0) 2022.06.13
[Java] 배열, 다차원 배열  (0) 2022.06.13

댓글