본문 바로가기

자바

Day 16

오늘 내용 간단정리

 

생성자의 목적 : 변수를 초기화 시키기 위해
생성자는 반드시 하나이상이 있어야 한다.
생성자 -> 초기화 메서드, 인스턴스를 생성할 때 단 한번, 인스턴스 변수를 초기화 한다.
생성자의 이름(매개변수) { 초기화 코드}
요구사항에 맞게 개발 환경에 맞게 생성자를 사용할 것!!
생성자를 정의해서 사용해야 할 경우와 반대의 경우가 있으므로 상황에 맞게 정의해서 사용한다.
 
오버로딩 -> 이름이 같은 메소드 정의 
오버로딩의 조건 1.메소드 이름은 같다. 2.매개변수의 개수가 틀리거나, 매개변수의 타입이 달라야 오버로딩이 성립
오버라이딩: 상속 클래스의 메소드를 재정의 (선언부x 반환타입, 이름() { 처리부를 재정의 } )
 
클래스의 영역에서 정의 -> 인스턴스 변수, 인스턴스가 생성될때 변수의 메모리 공간이 생성된다. 초기화를 생략 가능하다.
참조형 변수의 기본 값 -> null
this -> 자기 자신의 참조값을 가지느 참조 변수
매서드안에 같은 이름의 매개변수(지역변수)와 인스턴스(참조)변수가 있다면 자바에서는 매개변수를 우선시 하므로 인스턴스변수에 this를 사용하여 꼭 구분해주어야 한다.!!!
 
값 하나 저장 -> 변수
같은 타입의 여러개 저장 -> 배열(클래스 타입)
자바 : 구조체 + 메소드 -> 클래스 -> 타입
 
private 접근제어 지시자를 쓰는 이유 : 클래스 내부의 멤버들만 참조가 가능 : 정보 은닉, 변수의 데이터를 보호

 

Class 상속을 이용하고 주민등록번호로 나이를 구하는 예제 ver2
주민등록번호를 매개 변수로 받고 주민등록번호의 정보로 1900년대 생과 2000년대 생을 구분하는 조건식으로 주민등록번호 7번째 자리 1,2,3,4를 통해 1,2는 1900년대생 3,4,를 통해 2000년대생을 판별해주고 나이 값을 리턴해주는 매서드를 추가하였다.
package com.test3;

import java.util.Calendar;

//Person 클래스를 정의 
class Person {

	// 인스턴스 변수의 경우 초기화를 생략 가능
	// 주민등록 번호 rrn(resident registration number)
	// 이름을 저장하는 변수,주민등록번호를 저장하는 변수를 정의
	// 성별을 저장하는 변수를 정의
	String name;
	String rrn;
	String gender;

	// 생성자를 정의해서 인스턴스 변수들을 초기화
	public Person(String name, String rrn,  String gender) {
		this.name = name;
		this.rrn = rrn;
		this.gender = gender;
	}

	// 인사하는 메소드를 정의
	public void insa() {
		System.out.println("안녕하세요 저는 " + name + "입니다." + ageCal(rrn) + "살 입니다.");
	}
	int ageCal(String rrn) {
		//char 배열을 이용하여 문자열에 저장되어있는 값 중 8번째 자리값을 출력해준다.
		char[] a = rrn.toCharArray();
		// 뒷자리 첫번째 숫자가 1,2 일 경우  1900년대 생 
		if(a[7] == '1' || a[7] == '2') {
			int yy = 1900 +Integer.parseInt(rrn.substring(0, 2));
			int age = Calendar.getInstance().get(Calendar.YEAR) - yy -1;
			return age;
			// 뒷자리 첫번째 숫자가 3,4일경우 2000년대생
		}else if(a[7] == '3' || a[7] == '4') {
			int yy = 2000 +Integer.parseInt(rrn.substring(0, 2));
			int age = Calendar.getInstance().get(Calendar.YEAR) - yy -1;
			return age;
		}
		//값이 잘못 입력된 경우 
		return 0;

//		if(Integer.parseInt(rrn.substring(7,8)) == 1 || Integer.parseInt(rrn.substring(7,8)) == 2 ) {
//			int yy = 1900 +Integer.parseInt(rrn.substring(0, 2));
//			int age = Calendar.getInstance().get(Calendar.YEAR) - yy -1;
//			return age;
//	
//		}else if(Integer.parseInt(rrn.substring(7,8)) == 3 ||Integer.parseInt(rrn.substring(7,8)) == 4) {
//			int yy = 2000 +Integer.parseInt(rrn.substring(0, 2));
//			int age = Calendar.getInstance().get(Calendar.YEAR) - yy -1;
//			return age;
//		}
//		return 0;
		
	}
}

// Person 클래스를 상속
class Male extends Person {
	private String hobby;

	public Male(String name, String rrn, String hobby) {
		super(name, rrn, "남자");
		this.hobby = hobby;

	}

	public void insa() {
		System.out.println("안녕하세요 저는 " + name + "입니다." + ageCal(rrn) + "살 입니다.");
		System.out.println("성별은 " + gender + "입니다.");
		System.out.println("저의 취미는 " + getHobby() + "입니다.");
	}

	public String getHobby() {
		return hobby;
	}

	public void setHobby(String hobby) {
		this.hobby = hobby;
	}

}

// Person 클래스를 상속
class Female extends Person {
	private String hobby;

	public Female(String name, String rrn,  String hobby) {
		super(name, rrn, "여자");
		this.hobby = hobby;
	}

	public void insa() {
		System.out.println("안녕하세요 저는 " + name + "입니다." + ageCal(rrn) + "살 입니다.");
		System.out.println("성별은 " + gender + "입니다.");
		System.out.println("저의 취미는 " + getHobby() + "입니다.");
	}

	public String getHobby() {
		return hobby;
	}

	public void setHobby(String hobby) {
		this.hobby = hobby;
	}
}

public class PersonTest {
	public static void main(String[] args) {
		Person male = new Male("둘리", "950112-1000000","운동");
		Person female = new Female("릴리", "980222-2000000","요리");
		Person male1 = new Male("왈리","020000-30000000","음악감상");
		Person female2 = new Female("길리","021111-2000000","영화감상");
		male.insa();
		male1.insa();
		System.out.println("============================");
		female.insa();
		female2.insa();
	}
}
출력결과
안녕하세요 저는 둘리입니다.25살 입니다.
성별은 남자입니다.
저의 취미는 운동입니다.
안녕하세요 저는 왈리입니다.18살 입니다.
성별은 남자입니다.
저의 취미는 음악감상입니다.
============================
안녕하세요 저는 릴리입니다.22살 입니다.
성별은 여자입니다.
저의 취미는 요리입니다.
안녕하세요 저는 길리입니다.118살 입니다.
성별은 여자입니다.
저의 취미는 영화감상입니다.

 


독감예방 접종 가능 여부와 건강검진 대상 여부를 판별하는 예제 ver2
Calendar 클래스를 이용하여 태어난 연도 받고 나이로 값을 바꾸어 조건식에 맞게 테스트 하였다. 
변경된 조건식 : 짝수 해에 태어난 사람은 올해가 짝수년이면 검사대상이 되는 조건에서 짝수해에 태어난 사람은 무조건 검사대상이 되는 조건으로 잘못 이해 했었기 때문에  코드를 수정하였다.
올해가 짝수 해 라면 짝수 해에 태어난 사람이 검사대상 or 올해가 홀수 해 라면 홀수 해에 태어난 사람이 검사대상 
올해는 홀수해이기 때문에 홀수해에 태어난 사람들이 검사대상이 된 것이다. 
package com.test4;

import java.util.*;

public class Member1 {
	void vaccinCheck(int birthYear) {
		int age = ageCal(birthYear); // 나이연산
		boolean check1 = age < 15 || age >= 65;
		boolean check2 = !(age >= 15 && age < 65);
		
		System.out.println(check1);
		System.out.println(check2);
		
		if(check1) {
			System.out.println("무료 예방접종이 가능합니다.");
		}else {
			System.out.println("무료접종 대상이 아닙니다.");
		}		
	}
	void checkUp(int birthYear) {
		int age = ageCal(birthYear); // 나이연산
		boolean check1 = birthYear % 2 ==0 && 2021 % 2 == 0 ||
				birthYear % 2 ==1 && 2021% 2 ==1;
//			짝수 년이면 짝수 해 / 홀수 해 이면 홀수 해 가 검진대상 이되도록 
		boolean check2 = birthYear % 2 == 2021 % 2;
		if(age >= 20 && check2) {
			System.out.println("검진 대상자 입니다.");
			if(age >= 40) {
				System.out.println("암검진 대상자");
			}
		}else {
			System.out.println("검진 대상자 아닙니다.");
		}
	}
	// 태어난 년도를 입력하면 나이를 반환하는 메소드 
	int ageCal(int year) {
		//싱글톤 패턴 : 객체를 생성하는 것이 아닌 (new ~~ () -> X) 
//		int currentYear = Calendar.getInstance().get(Calendar.YEAR);
		return Calendar.getInstance().get(Calendar.YEAR) - year-1;
	}

	public static void main(String[] args) {
		Member1 member1 = new Member1();	
		Scanner scan = new Scanner(System.in);
		System.out.println("태어난 년도를 입력해주세요.");
		int brithYear = scan.nextInt();
		
		
	}
}

 

출력결과1
태어난 년도를 입력해주세요.
2000
false
false
무료접종 대상이 아닙니다.
검진 대상자 아닙니다.
출력결과2
태어난 년도를 입력해주세요.
1999
false
false
무료접종 대상이 아닙니다.
검진 대상자 입니다.


Student 클래스에서 배열을 정의하고 값을 출력하는 예제 ver2
10명의 kor,eng,math를 나타내고 총점을 구하여 평균을 매기고 과목별로 점수를 합산한 평균과 전체 학생의 평균을 구한 값을 출력하는 기능을 추가하였다.  
package com.test02;

public class Student {
	// 학생이름, 국어점수, 영어점수, 수학점수를 저장하는 변수를 정의합니다.
	private String name;
	private int kor;
	private int eng;
	private int math;

	// 생성자 정의
	public Student(String name, int kor, int eng, int math) {
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.math = math;
	}

	// 총점과 평균을 구해 결과를 반환하는 메소드를 정의 합니다.
	public int getTotal() {
		return this.kor + this.eng + this.math;
		
	}

	public double getAvg() {
		
		return  (double) getTotal() / 3;
	}

	// 변수는 캡슐화 getter/setter메소드를 정의 합니다.
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getKor() {
		return kor;
	}

	public void setKor(int kor) {
		this.kor = kor;
	}

	public int getEng() {
		return eng;
	}

	public void setEng(int eng) {
		this.eng = eng;
	}

	public int getMath() {
		return math;
	}

	public void setMath(int math) {
		this.math = math;
	}

	public String toString() {
		return name;
	}
}
==============================================================================================
package com.test02;
public class StudentTest {
	public static void main(String[] args) {
		int mathSum = 0;
		int engSum = 0;
		int korSum = 0;
		double sumClass = 0;
		double avgClass = 0;
		//Student 객체배열을 만들고 인스턴스와 생성자 초기화 
		
		//student 타입의 인스턴스를 생성하고 배열에 저장하는 코드를 정의 해봅시다. 
		//Student[] students = new Student[10];
		//student[0] = new Student("홍길동",80,80,80);
		// ....
		//student[9] = new Student("김",90,90,90);
		Student[] stu = {
			new Student("김씨",95,90,80),
			new Student("이씨",90,80,70),
			new Student("박씨",80,85,80),
			new Student("최씨",75,80,90),
			new Student("조씨",80,70,85),
			new Student("우씨",70,75,70),
			new Student("유씨",90,80,80),
			new Student("사씨",80,80,65),
			new Student("하씨",95,90,70),
			new Student("구씨",75,75,80)
		};
		//각 과목마다 총합을 구하여 평균 값을 구하는 기능을 추가해보자 
		System.out.print("이름 \t\t수학 \t 영어 \t 국어 \t 총점\t 평균");
		System.out.println("\n==================================================================");
		for(int i = 0; i <stu.length; i++) {
			System.out.print(stu[i].getName());
			System.out.print("\t\t");
			System.out.print(stu[i].getMath());
			System.out.print(" \t");
			System.out.print(stu[i].getEng());
			System.out.print(" \t");
			System.out.print(stu[i].getKor());
			System.out.print(" \t");
			System.out.print(stu[i].getTotal());
			System.out.print(" \t");
			System.out.println(stu[i].getAvg());
			sumClass += stu[i].getAvg();
			mathSum += stu[i].getMath();
			engSum += stu[i].getEng();
			korSum += stu[i].getKor();
			
		}
    }
}      
출력결과
이름  수학   영어   국어   총점  평균
==================================================================
김씨 80  90  95  265  88.33333333333333
이씨 70  80  90  240  80.0
박씨 80  85  80  245  81.66666666666667
최씨 90  80  75  245  81.66666666666667
조씨 85  70  80  235  78.33333333333333
우씨 70  75  70  215  71.66666666666667
유씨 80  80  90  250  83.33333333333333
사씨 65  80  80  225  75.0
하씨 70  90  95  255  85.0
구씨 80  75  75  230  76.66666666666667
=================================================================
각 과목 평균 77.0 80.5 83.0 80.16666666666666

 

 

 

 

'자바' 카테고리의 다른 글

Day19  (0) 2021.05.31
Day18  (0) 2021.05.28
Day14  (0) 2021.05.24
Day13  (0) 2021.05.21
Day12  (0) 2021.05.20