▶ 자바에서 클래스는 틀이고, 인스턴스는 메모리에 올라온 상태를 의미한다.
더 자세히 설명하면, 클래스는 객체들의 공통점을 찾아내서 하나의 틀로 만든것이다 그리고
메모리에 실제로 들어가게 되는 데이터가 객체이다.
※ 데이터베이스의 테이블과 비슷한데 테이블은 행으로 추가되며 디스크에 저장된다 그리고 테이블은 변수만 있다고 본다면 클래스에는 변수와 함수가 들어갈 수 있다.
▷ 좀 더 전문적인 표현으로, 클래스의 변수는 멤버 변수 / 클래스에 들어있는 함수는 메서드라고한다.
public class StudentTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student s1 = new Student();
Student s2 = new Student();
s1.name = "김태희";
s1.korean= 90;
s1.english = 95;
s1.math = 100;
s1.total = s1.korean+s1.english+s1.math;
s1.avg = s1.total / 3;
s2.name = "원빈";
s2.korean= 80;
s2.english = 90;
s2.math = 70;
s2.total = s2.korean+s2.english+s2.math;
s2.avg = s2.total / 3;
//s1.print();
//s2.print();
// 김태희의 수학점수가 잘못되었습니다.
// 97점으로 수정해주세요
s1.math = 97;
s1.print();
// 수학점수 수정하니까 total이랑 average는 그대로다ㅜㅜ
// 위의 코드를 개선해서, 총점과 평균구하는것은 스튜던트 클래스가 할 일이므로, 스튜던트 클래스에서 함수로 만들었다.
s1.sum();
s1.average();
// 이러면 무조건 sum() 먼저 호출해야 average()를 호출할 수 있다 따라서 함수를 하나로 만들어서 해당 함수 내부에서 알아서 순서 고려해서 함수 제공한다
s1.calculate();
// 이러면 점수를 바꾸면 무조건 호출해야 다른 변수에 적용이 된다
s1.print();
System.out.println(s1.getMath());
s1.setMath(99);
System.out.println(s1.getMath());
// 국어점수와 영어점수도 변경이 되면
// 총점과 평균도 변경된 점수로 바뀌도록 Product 클래스를 수정하세요
s1.setEnglish(97);
System.out.println(s1.getEnglish());
s1.setKorean(97);
System.out.println(s1.getKorean());
s1.print();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
Student s3 = new Student();
s3.setName("토토");
s3.setKorean(88);
s3.setEnglish(69);
s3.setMath(91);
s3.print();
s3.setKorean(92);
s3.print();
}
}
public class Student {
String name;
int korean;
int english;
int math;
int total;
double avg;
public void setName(String name) {
this.name = name;
}
public int getMath() {
return math;
}
public void setMath(int math) {
this.math = math;
calculate();
}
public int getKorean() {
return korean;
}
public void setKorean(int korean) {
this.korean = korean;
calculate();
}
public int getEnglish() {
return english;
}
public void setEnglish(int english) {
this.english = english;
calculate();
}
void calculate() {
sum();
average(); // sum과 average 살려두고 싶으면 이렇게써라
}
void sum(){
total = korean+english+math;
}
void average() {
avg = total/3.0;
}
void print(){
System.out.println(name);
System.out.println(korean);
System.out.println(english);
System.out.println(math);
System.out.println(total);
System.out.println(avg);
}
}
●이클립스에 getter,setter를 자동으로 만들어주는 기능이 있다.
public static void main(String[] args) {
Student s3 = new Student();
s3.setName("토토");
s3.setKorean(88);
s3.setEnglish(69);
s3.setMath(91);
s3.print();
s3.setKorean(92);
s3.print();
}
위의 코드를 이용해서 자바 메모리 구조를 자세히 살펴보자!
Student s3 = new Student();
s3.setName("토토");
'Java' 카테고리의 다른 글
메서드 오버로딩(Overloading) (0) | 2023.07.03 |
---|---|
Static 변수 (0) | 2023.07.03 |
자바 함수 0630 (0) | 2023.06.30 |
자바 배열(Array) 0630 (0) | 2023.06.30 |
자바 switch, 반복문 0630 (0) | 2023.06.30 |