Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Min's dev-log

[JAVA] 클래스와 객체 본문

JAVA

[JAVA] 클래스와 객체

minyy 2023. 5. 1. 19:10

* 클래스를 언제 만드나요?

: 내가 저장하고싶은 데이터의 자료형이 없을 때 원하는 자료형을 만들 때 클래스를 사용한다!

 

클래스

자바의 기본단위

데이터들을 생성하기 위해 미리 구조를 선언(정의)한 것이다.

"붕어빵틀"이라고 생각하면 이해하기 쉽다.

해당 구조를 통해 변수(데이터)를 만들어낼수있는데 그것이 객체이다.

 

객체(인스턴스)

반드시 [ new 생성자() ]을 통해서 생성된다

=> 객체화 (인스턴스화)라고 하며 "붕어빵"이라고 보면 된다.

 

클래스 : 객체 = 1 : N

클래스(구조,자료형)을 하나 잘 정의해놓으면 객체는 얼마든지 두고두고 여러개 만들어낼 수 있다.

객체는 다 같지않다. 다를수있다.

 

코드를 보며 이해해보자.

package class04;

// 클래스 선언, 정의 -> 메모리에 공간을 차지하고있는 학생은없다.
// 함수- 호출, 클래스는 생성 
class Student{ // class : 자바의 기본단위, 자료형의 일종
	String name; // 멤버변수, 속성, 필드
	int score;
	// 인사하는 기능
	void hello() { // 메서드, (멤버)함수
		// 클래스의 메서드 만드는 방법
		// static : 객체와 무관하게 -> 객체지향언어에서는 쓰면 안된다
		System.out.println("저는 "+name+"이고, "+score+"점입니다.");
	}
}

public class Test02 {
	public static void main(String[] args) {
		// 학생: 이름,성적, 나이 주소/ 인사()
		// 힉생이라는 "지료형"이 없음
		// => 학생이나는 "자료형"을 만즐어보자
		
		Student stu1 = new Student(); // 기본생성자라서 사용가능.
		// 본 객체 메모리는 heap영역에 만들어지고 이 주소는 스택영역 stu1에 저장
		// 같은페이지에 있어서 import안뜸
		// 클래스	   객체 = new 생성자();
		//    :   객체화(인스턴스화)
		// 반죽을 넣어서 붕어빵을 만드는 행위
		stu1.name = "홍길동";
		stu1.score=90;
		Student stu2 = new Student();
		// 클래스	 객체 = new 생성자();
				// 한개의 클래스(붕어빵틀)에서 여러개 사용할수있다 
				// -> 함수도 한개 만들어서 여러개 호출가능했다.
		// 본 객체 메모리는 heap영역에 만들어지고 이 주소는 스택영역 stu2에 저장
		// stu1과 stu2는 다르다.
		stu2.name="임꺽정";
		stu2.score=88;
		
		System.out.println(stu1);
		System.out.println(stu2);
		// heap메모리 영역의 주소를 받고있기때문에 주소가 출력된다.

		stu1.hello();
		stu2.hello();
		// 같은 함수를 쓰고있는데 주어가 다르기 때문에 output이 다르게나온다
	}
}

 

Student stu1 = new Student();

Student stu2 = new Student();

stu1, stu2는 new를 쓰고있기 때문에 heap 영역에 각각 생성된다.

이때 나오는 주소가 stack영역의 stu1, stu2에 저장되는 것이다.

stu1,stu2는 서로 다를 뿐 아니라 실제 본메모리는 heap영역에 있다.

stack의 stu1, stu2는 까보면 주소만 들어있다.

 

Student stu1 = new Student();

⇒ “가지고있는 붕어빵틀(Student)에 반죽을 부어서(new Student()) stu1이라는 붕어빵 만들래!” 라는 뜻이다.

대입연산자 기준 오른쪽을 먼저 수행한다. 즉, 붕어빵을 먼저 굽는다.

stu1.name = "홍길동";

stu1.score = 90;

이 코드는 처음에 만든 클래스(붕어빵 틀)을 사용하는게 아니라 틀을 보고

heap영역에 이미 만들어진 공간(객체, stu1)에 대해서 적용이 되는 것이다.

클래스 선언 –> 어딘가에 구조를 구비 –> 생성자를 통해 객체화, 인스턴스화 할적에 클래스 틀을 보고 빵을 구워내는 것

즉, 이 코드는 구워낸 빵들에게 값을 부여하는 파트이다.

'JAVA' 카테고리의 다른 글

[JAVA] 클래스 변수  (0) 2023.05.03
[JAVA] 생성자  (0) 2023.05.02
[JAVA] 객체 지향 언어  (0) 2023.05.01
[JAVA] 함수 유형별로 알아보기+ call by value / call by reference  (0) 2023.04.30
[JAVA] 배열  (0) 2023.04.29
Comments