본문 바로가기
코리아 IT아카데미/Java

6일차 | getter, setter, this, static, 마법사·전사 전투 과제에 추가하기

by Sharon kim 2021. 10. 25.
복습순서
메모
ch06>
Subject
Student
MainTest1



ch07>
Hero
Bank
MainTest
ch08>
Person

ch09>
MainTest1
NumberPrinter
ex1>
MainTest1
Warrior
Wizard
 

과목 클래스 설계

package ch06;

public class Subject {
	String subjectName;
	int score;
	int subjectId;
}

학생 클래스 설계

package ch06;

public class Student {
	
	public int studentId;
	public String studentName;
	
	//우리가 설계한 클래스를 참조 타입으로 사용한다.
	Subject korea;
	private Subject math;
	
	//생성자
	public Student(int id, String name) {
		studentId = id;
		studentName = name;
		
		//참조 타입은 생성을 해야 사용할 수 있다.
		//메모리에 존재하게 만들어야 한다.
		korea = new Subject();
		math = new Subject();
	}
	//정보를 입력받는 메서드 생성(국어 과목에 대한 정보 세팅)
	public void setKoreaSubject(String name, int score) {
		korea.subjectName = name;
		korea.score = score;
	}
	//(수학과목에 대한 정보 세팅)
	public void setMathSubject(String name, int score) {
		math.subjectName = name;
		math.score = score;
	}
	//학생의 총점을 화면에 출력하는 기능 만들기
	public void showStudentScore() {
		int total = korea.score + math.score;
		System.out.println(studentName 
				+ "학생의 총점은 " + total + " 입니다.");
	}
}

학생 클래스 사용

package ch06;

//클래스를 사용하는 입장
public class MainTest1 {
	//main function_start of code
	public static void main(String[] args) {
		
		Student studentLee = new Student(1,"Lee");
		studentLee.setKoreaSubject("국어", 100);
		studentLee.setMathSubject("수학", 90);
		studentLee.showStudentScore();
		
		//학생2동작 총점구하기
		Student studentKim = new Student(2,"kim");
		studentKim.setKoreaSubject("국어", 80);
		studentKim.setMathSubject("수학", 70);
		studentKim.showStudentScore();
		
		//학생3동작 총점구하기
		Student studentPark = new Student(3, "Park");
		studentPark.setKoreaSubject("국어", 60);
		studentPark.setMathSubject("수학", 50);
		studentPark.showStudentScore();
		
		
	}//end of main
}//end of class

클래스 설계 : getter, setter 연습 , 방어적 코드 사용

package ch07;

public class Hero {

	private String name;
	private int hp;
	private double defense;
	private int level;
	
	//get
	public String getName() {
		return name;
	}//end of get
	
	//set
	public void setName(String name) {
		//방어적 코드 작성
		if(name == null || name == "" || name.length() < 2) {
			System.out.println("잘못된 입력입니다. 이름을 다시 입력해주세요");
		}else {
			this.name = name;
		}//end of if
	}//end of set
	
	//hp, defense, level
	//get,set 메서드를 만들어 주세요
	//메서드를 설계하는 코드 작성
	//
	public int getHp() {
		return hp;
	}
	public void setHp(int hp) {
		if(hp < 0) {
			System.out.println("잘못입력하셨습니다.");
		}
			this.hp = hp;
	}
	//
		public double getDefense() {
			return defense;
		}
		public void setDefense(double defense) {
			if(defense < 0) {
				System.out.println("잘못입력하셨습니다.");
			}else {
				this.defense = defense;
			}
		}
		
	//
		public double getLevel() {
			return level;
		}
		public void setLevel(int level) {
			if(level < 0) {
				System.out.println("잘못입력하셨습니다.");
			}else {
				this.level = level;
			}
		}
	//main함수
	public static void main(String[] args) {
		//Hero 객체 생성 후 getter, setter 메서드를 사용해 보세요.
		Hero hero = new Hero();
		hero.setName("야스오");
		// == new Hero();
		String name = hero.getName();
		System.out.println("돌려받은 값 : " + name);
		
	}//end of main
}//end of class

은행 클래스 설계 

package ch07;

public class Bank {
	
	//정보은닉
	private int balance;
	//멤버변수를 정보은닉해서 getter,setter를 이용 대표적인 oop방식
	//메서드
	
	//입금기능
	public void deposit(int money) {
		//this.balance =this.balance + money;
		this.balance += money;
	}
	//출금기능
	public int withdraw(int money) {
		this.balance -= money;
		return money;
	}
	public void showInfo() {
		System.out.println("현재잔액은 : " + this.balance + "입니다.");
	}
	
	//getter 메서드 만들기
	//일반적으로 get()메서드를 만들어서 외부에서 확인할 수 있도록 구현한다.
	public int getBalance() {
		return this.balance;
	}
	//setter메서드 만들기
	//일반적으로 set() 메서드를 제공해서 
	//외부에서 멤버변수에 접근할 수 있도록 구현한다.
	public void setBalance(int balance) {
		if(balance < 0) {
			System.out.println("잘못된 입력입니다.");
		}else {
			this.balance = balance;
		}
	}
	//public class는 .java파일 안에 단 하나만 사용할 수 있다
class Student{
	
}
}//end of class

은행 클래스 사용, 접근 지시 제어자 설명

package ch07;

public class MainTest1 {

	public static void main(String[] args) {
		
		Bank bank = new Bank();
		//멤버변수에 성질 확인
		// int balance --> 0
		// double balance -->0.0
		//String balance --> null
		
		bank.deposit(10_000);
		bank.showInfo();
		
		//출금을 합니다.
		int money = bank.withdraw(5_000);
		System.out.println("돌려받은 금액 : " + money);
		bank.showInfo();
		
		//신입이 실수로 멤버변수에 바로 접근해서 잔액을 수정 함
//		bank.balance = 100_000;
		bank.showInfo();
		
		//
		//getter, setter
		//read only
		int returnMoney = bank.getBalance();
		System.out.println(returnMoney);
		
		//setter 사용해보기
		bank.setBalance(-10000);
		bank.showInfo();
		
		//접근 제어 지시자 4가지
		//1. public - 누구나 접근을 허용하게 한다
		//2. default - 같은 패키지 내에서 접근을 허용한다. 
		//             아무것도 안적으면 default
		//3. protected - 상속관계에서 접근을 허용한다.
		//4. private - 같은 클래스에서만 접근을 허용한다.
	}
}

this 사용한 클래스 설계, 사용

package ch08;

public class Person {

	//this 란 
	//1. 인스턴스(객체) 자신의 메모리를 가리킨다.
	//2. 생성자에서 또 다른 생성자를 호출할 때 사용할 수 있다.
	//3. 자신의 주소(참조값, 주소값)를 반환 시킬 수 있다.
	
	String name;
	int age;
	
	public Person(String name, int age) {
		//1.자기자신을 가리키는 this
		this.name = name;
		this.age = age;
	}
	
	public Person() {
		//기본 생성자에서 다른 생성자를 호출
		this("이름없음", 1);
//		this.name = "이름없음";
//		this.age = 1;
	}
	
	//자신의 주소값(참조값)을 반환시킬 수 있다.
	//빌더 패턴을 만들어 낼 수 있다..
	public Person getPerson() {
		return this;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public void showInfo() {
		System.out.println("이름 : " + name 
         				+ ", 나이 : " + age);
	}
	//main
	public static void main(String[] args) {
		Person person1 = new Person();
		person1.showInfo();
		person1.setName("홍길동");
		
		//참조값을 받아서 다른 인스턴스 변수에 주소를 할당해 보자.
		Person person2 = person1.getPerson();
		
		person2.showInfo();
		person2.setName("이순신");
		
		System.out.println("-----------------");
		
		System.out.println(person1);
		System.out.println(person2);
		
		System.out.println("-----------------");
		
		person1.showInfo();
		person1.showInfo();
	}//end of main
	
}//end

 


번호표 클래스 설계

package ch09;

public class NumberPrinter {
	
	private int id;
	private static int waitNumber = 1;
	
	public NumberPrinter(int id) {
		this.id = id;
	}
	// 번호표를 찍어 주세요
	public void printWaitNumber() {
		System.out.println(id + "기기의 대기순번 : " + waitNumber);
		waitNumber++;
	}
}

번호표 클래스 사용

package ch09;

public class MainTest1 {

	public static void main(String[] args) {
		
		NumberPrinter numberPrinter1 = new NumberPrinter(1);
		NumberPrinter numberPrinter2 = new NumberPrinter(2);
		NumberPrinter numberPrinter3 = new NumberPrinter(3);
		
		numberPrinter3.printWaitNumber();
		numberPrinter3.printWaitNumber();
		numberPrinter3.printWaitNumber();
		System.out.println("-----------------------");
		//
		numberPrinter1.printWaitNumber();
		numberPrinter1.printWaitNumber();
		numberPrinter1.printWaitNumber();
		System.out.println("-----------------------");
		//
		numberPrinter2.printWaitNumber();
		numberPrinter2.printWaitNumber();
		numberPrinter2.printWaitNumber();
		
	}//end of main
}

ex1> MainTest1, Warrior, Wizard 배운 것 추가하여 보수 설계

 

수업내용

[출처] https://blog.naver.com/devnote1 작성자 devnote1