본문 바로가기

Java

자바 class와 객체(인스턴스) / 자바 메모리 관련 0630

▶ 자바에서 클래스는 틀이고, 인스턴스는 메모리에 올라온 상태를 의미한다.

더 자세히 설명하면, 클래스는 객체들의 공통점을 찾아내서 하나의 틀로 만든것이다 그리고

메모리에 실제로 들어가게 되는 데이터가 객체이다.

※ 데이터베이스의 테이블과 비슷한데 테이블은 행으로 추가되며 디스크에 저장된다 그리고 테이블은 변수만 있다고 본다면 클래스에는 변수와 함수가 들어갈 수 있다.

▷ 좀 더 전문적인 표현으로, 클래스의 변수는 멤버 변수 / 클래스에 들어있는 함수는 메서드라고한다.

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