Min's dev-log
[JAVA] 클래스와 객체 본문
* 클래스를 언제 만드나요?
: 내가 저장하고싶은 데이터의 자료형이 없을 때 원하는 자료형을 만들 때 클래스를 사용한다!
클래스
자바의 기본단위
데이터들을 생성하기 위해 미리 구조를 선언(정의)한 것이다.
"붕어빵틀"이라고 생각하면 이해하기 쉽다.
해당 구조를 통해 변수(데이터)를 만들어낼수있는데 그것이 객체이다.
객체(인스턴스)
반드시 [ 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 |