# 오버로딩
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 |