국비학원/공부

17일차 java(5)

mikan- 2023. 5. 15. 17:35

# 오버로딩

class Test2 {
	void test() {
		System.out.println("다른 클래스의 객체명은 사용이 가능하다.");
	}
}

// 생성자 오버로딩 + 메소드 오버로딩
// 클래스를 작성하는 목적 : 객체생성을 위해
// 1) 데이터 저장목적, 2) 메소드 호출
public class PrintTest {
	
	// (3) 생성자 오버로딩 -> 3개까지 가능
	public PrintTest() {}
	public PrintTest(char a) { 
		this.print(a); // print('v') (2)
		
		// 생성자 또는 메소드 내부에서는 자기클래스의 객체명은 사용이 안됨
		// 생성자 내부에서는 다른클래스 객체명을 쓰고 메소드도 호출이 가능
		Test2 t2 = new Test2();
		t2.test();
		System.out.println("char 매개변수를 받아서 처리함");
	}
	
	public PrintTest(int a) {
		print(a);
	}
	
	public PrintTest(boolean a) {
		print(a);
	}
	// public PrintTest() {} -> 기본생성자가 없으면 만들어서 호출함
	// 기본생성자가 안만들어지는 경우
	// - 다른 생성자가 존재하는 경우
	/*- (1) 오버로딩 기법을 안썻을때
	void charPrint(char a) {
		System.out.println("a ====> " + a);
	}
	
	void intPrint(int a) {
		System.out.println("a ====> " + a);
	}
	
	void booleanPrint(boolean a) {
		System.out.println("a ====> " + a);
	}
	*/
	
	
	// (2) 메소드 오버로딩
	void print(char a) {
		System.out.println("a ====> " + a); // (3)
	}
	
	void print(int a) {
		System.out.println("a ====> " + a);
	}
	
	void print(boolean a) {
		System.out.println("a ====> " + a);
	}
	
	public static void main(String[] args) {
		
		
		/*- (1)
		pt.charPrint('V');
		pt.intPrint(2023);
		pt.booleanPrint('A' > 'Z');
		*/
		
		/*- (2) 메소드 오버로딩
		PrintTest pt = new PrintTest(); // 객체생성
		pt.print('V');
		pt.print(2023);
		pt.print('A' > 'Z');
		*/
		
		// (3) 생성자 오버로딩
		// PrintTest pt 객체를 생성하면서 인수 1개짜리 문자열처리생성자 호출
		PrintTest pt = new PrintTest('v'); // (1)
		PrintTest pt1 = new PrintTest(2023); // (5)
		PrintTest pt2 = new PrintTest(3 > 2); // true
		
	}

}
// 아파트, 빌라에 거주하는 사람들의 정보를 저장(추상화, 캡슐화, 생성자오버로딩 + this)
class Person {
	// 1. 멤버변수
	private String name;
	private int age;
	// private String address, job....
	//(), (name), (age), (name, age)
	//(), (name), (age), (address), (name, age), (age, address), (name, address), (name, age, address)
	
	// 생성자는 보통 멤버변수 다음에 씀
	public Person() {  // 기본 생성자
		this.name = "홍길동"; // setName("홍길동");
		this.age = 23; // setAge(23);
	}
	
	// 오버로딩
	// Person p2 = new Person("테스트");
	public Person(String name) {
		this.name = name;
		age = 24;
		System.out.println("난 매개변수 1개짜리 문자열처리 생성자 호출됨");
	}
	
	// Person p3 = new Person(24);
	public Person(int age) {
		this.age = age;
		name = "테스트 김";
		System.out.println("난 매개변수 1개짜리 정수형처리 생성자 호출됨");
	}
	
	// Person p4 = new Person("임시", 27);
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
		System.out.println("난 매개변수 2개짜리 생성자 호출됨");
	}
	
	public void setName(String name) {
		this.name = name; // p1.name = "김길동";
	}
	
	public void setAge(int age) {
		if(age < 0) {
			System.out.println("나이의 음수는 안됩니다.");
			this.age = 23; // 음수 일시 default 값으로 23 설정
			return;
		}
		this.age = age;
	}
	
	/*
	 * public String getName() { return name; } public int getAge() { return age; }
	 */
	
	// 단순, 반복
	// this -> 현재 생성된 객체의 주소값을 대신 받아서 값을 저장시켜주는 역활
	void print() {
		System.out.println("이름 : " + this.name); // p1.name
		System.out.println("나이 : " + this.age); // p1.name
		System.out.println("===================");
	}
	
}

public class PersonHandling {
	
	public PersonHandling() {}
	public static void main(String[] args) {
		// 클래스명 객체명 = new 생성자명(); -> class명 = 생성자명은 같기 때문
		Person p1 = new Person(); // 객체 p1을 만들면서 기본생성자 호출
		p1.print();
		p1.setName("김길동");
		p1.setAge(24);
		p1.print();
		
		// Person클래스의 p2객체를 생성하면서 인수 1개 짜리 문자열처리 생성자 호출
		Person p2 = new Person("테스트");
		p2.print();
		
		// Person클래스의 p3객체를 생성하면서 인수 1개 짜리 정수형처리 생성자 호출
		Person p3 = new Person(23);
		p3.print();
		
		// Person클래스의 p4객체를 생성하면서 매개변수 2개 짜리 생성자 호출
		Person p4 = new Person("임시", 24);
		p4.print();
	}
}

 

# This

// This 가 사용되는 경우
// 1. 메소드(생성자 포함)를 작성할때
//    멤버변수와 매개변수가 서로 같을 때 구분하는 목적
public class ThisTest {

	private int a = 100; //2 (), (a)

	ThisTest(int a) {
		this.a = a; // 멤버변수 = 매개변수
	}
	
	public void setA(int a) {
		this.a = a;
	}
	
	public int getA() {
		return a;
	}

	public static void main(String[] args) {
		
		// ThisTest tt란 객체를 생성하면서 정수형 매개변수 1개짜리 생성자를 호출
		ThisTest tt = new ThisTest(200);
		tt.setA(400);
		System.out.println(tt.getA());
	}
}
// This 가 사용되는 경우
// 2. 현재 생성된 객체를 가리키는 예약어(키워드)로 사용
public class ThisTest2 {

	ThisTest2() {
		// 생성자 내부에서는 자기 클래스의 객체명을 사용할 수 가 없음
		System.out.println("현재 생성된 객체(this) : " + this );
	}

	public static void main(String[] args) {
		
		// ThisTest tt란 객체를 생성하면서 정수형 매개변수 1개짜리 생성자를 호출
		ThisTest2 aa = new ThisTest2();
		
		System.out.println("현재 생성된 객체이름(aa) : " + aa);
		System.out.println("======================================");
		
		ThisTest2 aa2 = new ThisTest2();
		System.out.println("현재 생성된 객체이름(aa2) : " + aa2);
	}
}

 

# 메소드 성적처리

import java.security.DrbgParameters.NextBytes;
// 외부의 패키지에 불러올때 import ----> 최상위패키지명.하위패키지명...불러올클래스명;
import java.util.Scanner;

// 성적처리 프로그램 -> 국, 영, 수 -> 합계 -> 평균 -> 등급 -> 모든 정보 한번에 출력
public class MethodEx {
	
	// 요구분석에 따라서 필요로 하는 메소드를 생각
	/*
	 *  메소드를 작성할때 매개변수를 주고, 안주는 경우(구분)
	 *  1. 멤버변수로 선언 -> 매개변수가 없는 메소드를 작성O
	 *  2. 멤버변수로 선언X -> 지역변수로 선언
	 *  						매개변수가 있는 메소드를 작성O
	 *  3. 반환값O -> caller가 처리
	 *     반환값X -> 호출한 메소드가 처리
	 */
	
	// int kor, eng, math, total;
	// double avg
	// orarg raed
	
	
	// 1. 총점(합계)
	int calcTotal(int kor, int eng, int math) {
	// int calcSum() {
		int total = kor + eng + math;
		return total;
	}
	
	// 2. 평균(총점 / 과목 수)
	double calcAvg(int total) {
		return (double)(total / 3);
	}
	// 매소드 오버로딩 : 비슷한 기능을 가진 메소드명은 하나의 메소드로 통합
	double calcAvg(int total, int sum) {
		return (double)(total/sum);
	}
	
	// 3. 등급(학점 -> 평균 점수에 A ~ F 까지)
	char calcGrade(double avg) {
		if (avg <= 100 && avg >= 90) return 'A';
		else if ( avg < 89 && avg >= 80) return 'B';
		else if ( avg < 79 && avg >= 70) return 'C';
		else if ( avg < 69 && avg >= 60) return 'D';
		else return 'F';
	}
	
	// 4. 총점, 평균, 등급 한번에 출력 -> 단순, 반복 -> 매개변수X 반환값X
	// 멤버변수가 없기 때문에 매개변수는 있어야됨
	void display(int total, double avg, char grade) {
		System.out.println("합계는(total) : " + total);
		System.out.println("평균은(avg) : " + avg);
		System.out.println("등급은(grade) : " + grade);
	}
	
	
	public static void main(String[] args) {
		// 맴버변수가 없기 때문에
		// 객체생성
		MethodEx me = new MethodEx();
		
		// 지역변수 : 메소드 내부에서만 사용이 가능 -> 다른 매소드에서 불러서 사용X
		// scanner : 사용자로부터 값을 입력받아 처리
		// nextInt() 정수, next() 문자
		// Ctrl + Shift + O : 자동 import 기능
		Scanner sc = new Scanner(System.in); //키보드
		System.out.println("1. 국어점수를 입력해주세요.");
		int kor = sc.nextInt(); // 소수점 : sc.nextDouble();
		System.out.println("2. 영어점수를 입력해주세요.");
		int eng = sc.nextInt();
		System.out.println("3. 수학점수를 입력해주세요.");
		int math = sc.nextInt();
		
		// 1. 총점
		int total = me.calcTotal(kor, eng, math);
		// System.out.println("총점수 : " + total);
		
		// 2. 평균
		double avg = me.calcAvg(total);
		
		// 3. 등급
		char grade = me.calcGrade(avg);
		
		// 4. 한번에 출력
		me.display(total, avg, grade);
	}
}

'국비학원 > 공부' 카테고리의 다른 글

19일차 java(7)  (0) 2023.07.02
18일차 java(6)  (0) 2023.05.16
16일차 java(4)  (1) 2023.05.15
15일차 java(3)  (1) 2023.05.11
14일차 java(2)  (0) 2023.05.10