오늘은 대망의 클래스가 들어가는 날이다... 강사님이 전날부터 겁을 주셨던 부분이기도 하여 걱정이 앞섰지만 !!!
공부는 하면 되니까 !!! 화이팅팅 :)
* 모임 주체할 때
1. 배열
- 같은 자료형끼리 모아주는 것
- 첨자(index. 방 번호)로 관리
(배열보다 문제풀기는 쉬워짐 but, 길어짐)
2. 클래스 (객체)
- 자료형 상관없이 모일 수 있음.
- 다른 자료형끼리도 모여줌
- 이름으로 관리
PersonMain.java
package class_;
class Person{//클래스 선언 가상화시켜놓음 -> 실제가 아니니 갖다쓸 수 없음.
// 메뉴판은 줘도 쓸 수 없음. new해줘야함.
private String name; //필드,초기화되어 있으므로 null 0 들어가있음
private int age; //private으로 데이터 감춘다.(캡슐화)
//기능하는 메소드가 들어가야함. public으로 공개해야함.
public void setName(String n){ //prametar 인수
name = n; //구현(이 함수는 이런 일을 합니다.)
}
public void setAge(int a) {
age = a;
}//데이터 받을 세터
public void setData(String n, int a) { //오버로드
name = n;
age= a;
}
public void setData() {
}
public String getName(){
return name;
}
public int getAge() {
return age;
}//데이터 꺼내올 게터
}
class Test {};
//------------
public class PersonMain {
public static void main(String[] args) {
Person aa; //객체
aa = new Person(); //생성 - 이 클래스를 메모리에 생성해주세요.
//메뉴판을 보고 aa라는 사람이 생성하고
//aa = new Test(); - error 다른 클래스의 주소는 받을 수 없음.
System.out.println("객체 aa = " + aa);
aa.setName("홍길동");//메소드 호출 홍길동 데이터 -> n
// -> name = 홍길동 -> 다시 돌아옴.(함수 쓰면 수행시간 길어짐)
aa.setAge(25);
//aa.name = "홍길동"; //aa주소 안에 잡아줘야함.
//aa.age = 25;
System.out.println("이름 = " + aa.getName() + " 나이 = " + aa.getAge());
System.out.println();
Person bb = new Person(); //메뉴판을 보고 bb라는 사람이 또 생성할 수 있음.
System.out.println("객체 bb = " + bb);
bb.setName("코난");
bb.setAge(13);
System.out.println("이름 = " + bb.getName() + " 나이 = " + bb.getAge());
System.out.println();
Person cc = new Person();
System.out.println("객체 cc = " + cc);
cc.setData("또치", 50);
System.out.println("이름 = " + cc.getName() + " 나이 = " + cc.getAge());
System.out.println();
Person dd = new Person();
System.out.println("객체 dd = " + dd);
cc.setData();
System.out.println("이름 = " + dd.getName() + " 나이 = " + dd.getAge());
System.out.println();
}
}
객체 aa = class_.Person@2f92e0f4
이름 = 홍길동 나이 = 25
객체 bb = class_.Person@1fb3ebeb
이름 = 코난 나이 = 13
객체 cc = class_.Person@548c4f57
이름 = 또치 나이 = 50
객체 dd = class_.Person@1218025c
이름 = null 나이 = 0
[문제] 월급 계산 프로그램
1. 세율
합계가 5,000,000원 이상이면 3% (0.03)
3,000,000원 이상이면 2% (0.02)
아니면 1% (0.01)
2. 숫자는 3자리마다 , 표시
3. 소수이하는 표시하지 않는다. (정수형)
클래스명 : SalaryDTO
필드 : name, job, basic, extra, total, rate, tax, salary
메소드 : setData(이름, 직급, 기본급, 수당)
calc() - 합계, 세율, 세금, 월급 계산
getName()
getJob()
getBasic()
getExtra()
getTotal()
getRate()
getTax()
getSalary()
클래스명 : SalaryMain
[실행결과]
이름 직급 기본급 수당 합계 세율 세금 월급
------------------------------------------------------------------------
홍길동 이사 4,800,000 300,000
송중기 사원 2,000,000 100,000
아이유 주임 2,900,000 150,000
SalaryDTO.java
package class_;
//1인분
public class SalaryDTO {
private String name, job;
private int basic, extra, total, tax, salary;
private double rate;
public void setDate(String n, String j, int b, int e) {
name = n;
job = j;
basic = b;
extra = e;
}
public void calc() {
total = basic + extra;
//rate = total >= 5000000 ? 0.03 : total >= 3000000 ? 0.02 : 0.01;
if(total >= 5000000)
rate = 0.03;
else if(total >=3000000)
rate = 0.02;
else
rate = 0.01;
tax = (int)(total * rate);
salary = total - tax;
}
public String getName() {
return name;
}
public String getJob() {
return job;
}
public int getBasic() {
return basic;
}
public int getExtra() {
return extra;
}
public int getTotal() {
return total;
}
public double getRate() {
return rate;
}
public int getTax() {
return tax;
}
public int getSalary() {
return salary;
}
}
SalaryMain.java
package class_;
import java.text.DecimalFormat;
public class SalaryMain {
public static void main(String[] args) {
DecimalFormat df = new DecimalFormat();
/*
SalaryDTO[] ar = new SalaryDTO[3]; //배열생성
ar[0] = new SalaryDTO();
ar[1] = new SalaryDTO();
ar[2] = new SalaryDTO();
*/
SalaryDTO[] ar = {new SalaryDTO(),
new SalaryDTO(),
new SalaryDTO()};
ar[0].setDate("홍길동", "이사", 4800000, 300000);
ar[1].setDate("송중기", "사원", 2000000, 100000);
ar[2].setDate("아이유", "주임", 2900000, 150000);
System.out.println("이름\t직급\t기본급\t\t수당\t합계\t\t세율\t세금\t월급");
System.out.println("-------------------------------------------------------------------------------");
for(SalaryDTO dto : ar) { //★★★★★
dto.calc();
System.out.println(dto.getName() + "\t"
+ dto.getJob() + "\t"
+ df.format(dto.getBasic()) + "\t"
+ df.format(dto.getExtra()) + "\t"
+ df.format(dto.getTotal()) + "\t"
+ dto.getRate() + "\t"
+ df.format(dto.getTax()) + "\t"
+ df.format(dto.getSalary()) + "\t"
);
}
}
}
이름 직급 기본급 수당 합계 세율 세금 월급
-------------------------------------------------------------------------------
홍길동 이사 4,800,000 300,000 5,100,000 0.03 153,000 4,947,000
송중기 사원 2,000,000 100,000 2,100,000 0.01 21,000 2,079,000
아이유 주임 2,900,000 150,000 3,050,000 0.02 61,000 2,989,000
DecimalFormat df = new DecimalFormat();
df.format(dto.getBasic())
1000자리마다 ,를 찍어주는 역할을 하는 함수이다.
이 코드에대해서 계속 까먹으니 외우자!!!!
for(SalaryDTO dto : ar) {
ar에 포함된 모든 SalaryDTO 객체를 하나씩 처리할 수 있다.
[문제] 성적처리
- 총점, 평균, 학점을 구하시오.
- 평균은 소수이하 2째자리까지 처리한다.
클래스명 : SungJuk
필드 : name, kor, eng, math, tot, avg, grade
메소드 : setData(이름, 국어, 영어, 수학)
calc() - 총점, 평균, 학점 계산
getName()
getKor()
getEng()
getMath()
getTot()
getAvg()
getGrade()
클래스명 : SungJukMain
[실행결과]
----------------------------------------------------
이름 국어 영어 수학 총점 평균 학점
----------------------------------------------------
홍길동 90 96 100
Sungjuk.java
package class_;
public class Sungjuk {
private String name;
private int kor, eng, math, tot;
private double avg;
private char grade;
public void setData(String n, int k, int e, int m){
name = n;
kor = k;
eng = e;
math = m;
}
public void calc() {
tot = kor + eng + math;
avg = tot / 3.0;
if(avg >= 90)
grade = 'A';
else if(avg >= 80)
grade = 'B';
else if(avg >= 70)
grade = 'C';
else if(avg >= 60)
grade = 'D';
else
grade = 'F';
}
public String getName() {
return name;
}
public int getKor() {
return kor;
}
public int getEng() {
return eng;
}
public int getMath() {
return math;
}
public int getTot() {
return tot;
}
public double getAvg() {
return avg;
}
public char getGrade() {
return grade;
}
}
SungjukMain.java
package class_;
public class SungjukMain {
public static void main(String[] args) {
Sungjuk aa = new Sungjuk();
aa.setData("홍길동", 90, 96, 100);
aa.calc();
System.out.println(aa.getName() + "\t"
+ aa.getKor() + "\t"
+ aa.getEng() + "\t"
+ aa.getMath() + "\t"
+ aa.getTot() + "\t"
+ String.format("%.2f", aa.getAvg()) + "\t"
+ aa.getGrade());
}
}
홍길동 90 96 100 286 95.33 A
[실행결과]
----------------------------------------------------------
이름 국어 영어 수학 총점 평균 학점
----------------------------------------------------------
홍길동 90 95 100
프로도 100 89 76
라이언 75 80 48
----------------------------------------------------------
SungjukMain2.java
package class_;
public class SungjukMain2 {
public static void main(String[] args) {
Sungjuk aa = new Sungjuk();
aa.setData("홍길동", 90, 96, 100);
aa.calc();
System.out.println(aa.getName() + "\t"
+ aa.getKor() + "\t"
+ aa.getEng() + "\t"
+ aa.getMath() + "\t"
+ aa.getTot() + "\t"
+ String.format("%.2f", aa.getAvg()) + "\t"
+ aa.getGrade());
Sungjuk bb = new Sungjuk();
bb.setData("프로도", 100, 89, 76);
bb.calc();
System.out.println(bb.getName() + "\t"
+ bb.getKor() + "\t"
+ bb.getEng() + "\t"
+ bb.getMath() + "\t"
+ bb.getTot() + "\t"
+ String.format("%.2f", bb.getAvg()) + "\t"
+ bb.getGrade());
Sungjuk cc = new Sungjuk();
cc.setData("라이언", 75, 80, 48);
cc.calc();
System.out.println(cc.getName() + "\t"
+ cc.getKor() + "\t"
+ cc.getEng() + "\t"
+ cc.getMath() + "\t"
+ cc.getTot() + "\t"
+ String.format("%.2f", cc.getAvg()) + "\t"
+ cc.getGrade());
}
}
홍길동 90 96 100 286 95.33 A
프로도 100 89 76 265 88.33 B
라이언 75 80 48 203 67.67 D
SungjukMain3.java
package class_;
public class SungjukMain3 {
public static void main(String[] args) {
/*
Sungjuk aa = new Sungjuk(); //객체
Sungjuk bb = new Sungjuk(); //객체
Sungjuk cc = new Sungjuk(); //객체
*/
Sungjuk[] ar = new Sungjuk[3]; // 객체배열 생성 / 클래스 생성한 것 아님. ★
// 방만 잡음
ar[0] = new Sungjuk(); //객체생성 !! //클래스 생성
ar[1] = new Sungjuk();
ar[2] = new Sungjuk();
ar[0].setData("홍길동", 90, 96, 100);
ar[1].setData("프로도", 100, 89, 76);
ar[2].setData("라이언", 75, 80, 48);
Sungjuk aa = new Sungjuk(); //객체
Sungjuk bb = new Sungjuk(); //객체
Sungjuk cc = new Sungjuk(); //객체
위에 방식보다 배열을 생성해서 하는 것이 더 좋다.
Sungjuk[] ar = new Sungjuk[3]; // 객체배열 생성 / 클래스 생성한 것 아님. ★
// 방만 잡음
ar[0] = new Sungjuk(); //객체생성 !! //클래스 생성
ar[1] = new Sungjuk();
ar[2] = new Sungjuk();
위에 주석에 적혀있듯이 객체배열 생성하고 객체생성해줘야 된다는 거 반드시 기억 !!
계속 까먹으니 머리에 외워두도록,,,
for(int i=0; i<ar.length; i++) {
ar[i].calc();
System.out.println(ar[i].getName() + "\t"
+ ar[i].getKor() + "\t"
+ ar[i].getEng() + "\t"
+ ar[i].getMath() + "\t"
+ ar[i].getTot() + "\t"
+ String.format("%.2f", ar[i].getAvg()) + "\t"
+ ar[i].getGrade());
}
}
}
홍길동 90 96 100 286 95.33 A
프로도 100 89 76 265 88.33 B
라이언 75 80 48 203 67.67 D
[문제] 합, 차, 곱, 몫 구하시오
[실행결과]
횟수 입력 : 3
x 입력 : 320
y 입력 : 258
x 입력 : 256
y 입력 : 125
x 입력 : 452
y 입력 : 365
X Y SUM SUB MUL DIV
320 258
256 125
452 365
ComputeDTO.java
package class_;
public class ComputeDTO {
private int x, y, sum, sub, mul;
private double div;
public void setX(int x) {
//x = x; //본인꺼한테 주고 끝나버림. 소멸되고 끝남.
//System.out.println("this = " + this);
this.x = x; //this.x -> 클래스꺼 / x -> 지꺼
}
public void setY(int y) {
this.y = y; //이때는 생략하면 안됨
}
public int getX() {
return this.x; //this는 생략 가능
}
public int getY() {
return this.y; //this는 생략 가능
}
public int getSum() {
return this.sum;
}
public int getSub() {
return this.sub;
}
public int getMul() {
return this.mul;
}
public double getDiv() {
return this.div;
}
public void calc() {
this.sum = this.x + this.y;
this.sub = this.x - this.y;
this.mul = this.x * this.y;
this.div = (double)this.x / this.y;
}
}
ComputeMain.java
package class_;
import java.util.Scanner;
public class ComputeMain {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("횟수 입력 : ");
int size = scan.nextInt();
ComputeDTO[] ar = new ComputeDTO[size];
//입력
for(int i=0; i<size; i++) {
ar[i] = new ComputeDTO(); //객체 생성
ComputeDTO[] ar = new ComputeDTO[size];
ar[i] = new ComputeDTO(); //객체 생성
바로 위쪽에서 강조했던 개념인 객체 배열만 생성한 것이므로 객체생성은 따로 또 해줘야한다!!
System.out.println("ar[" + i + "] = " + ar);
System.out.print("x 입력 : ");
ar[i].setX(scan.nextInt());
System.out.print("y 입력 : ");
ar[i].setY(scan.nextInt());
ar[i].calc();
System.out.println();
}
//출력
System.out.println("X\tY\tSUM\tSUB\tMUL\tDIV");
for(ComputeDTO dto : ar) {
System.out.print(dto.getX() + "\t"
+ dto.getY() + "\t"
+ dto.getSum() + "\t"
+ dto.getSub()+ "\t"
+ dto.getMul() + "\t"
+ dto.getDiv());
System.out.println();
}
}
}
횟수 입력 : 3
ar[0] = [Lclass_.ComputeDTO;@2d98a335
x 입력 : 320
y 입력 : 565
ar[1] = [Lclass_.ComputeDTO;@2d98a335
x 입력 : 545
y 입력 : 456
ar[2] = [Lclass_.ComputeDTO;@2d98a335
x 입력 : 789
y 입력 : 123
X Y SUM SUB MUL DIV
320 565 885 -245 180800 0.5663716814159292
545 456 1001 89 248520 1.1951754385964912
789 123 912 666 97047 6.414634146341464
'JAVA' 카테고리의 다른 글
DAY 5 - 배열 / 선택정렬 / 버블정렬 (2024.07.09) (0) | 2024.08.13 |
---|---|
DAY 6 - 다차원 배열 (2024.07.10) (0) | 2024.08.13 |
DAY 7 - HOMEWORK - 클럽 회원관리 (2024.07.11) (0) | 2024.08.12 |
DAY 8 - 메서드 / VarArgs / StringBuffer / StringBuilder (2024.07.12) (0) | 2024.08.12 |
DAY 9 - static / 상속 / Override / Overload (2024.07.15) (0) | 2024.08.12 |