일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- /
- 도커 #Docker #배포 #Spring #MySQL #백엔드배포
- chatgpt #gpt #챗지피티 #ai
- 도커 #docker #docker-compose.yml #도커컴포즈 #배포 #spring #mysql #docker-compose
- Today
- Total
개발자 데뷔!
06. [Java] 인스턴스 생성 (new) 본문
OOP
; Object-Oriented Programming
객체지향 프로그래밍
지난 번 포스팅에선, 패키지- class - main 함수간의 구조를 개략적으로 살펴보았다.
이번에는, 클래스 사용에 반드시 선행되어야 하는 '인스턴스 생성' 에 관한 부분을 자세히 알아보겠다.
인스턴스 생성
class를 사용하려면, 클래스를 우선 생성해야 한다.
클래스가 생성된다 = 클래스를 사용할 메모리공간(힙메모리)를 할당 받는다.
클래스형 변수이름 = new 생성자
자료형(class) 인스턴스(참조변수) = 예약어(new) 생성자
이 때, 간단히 이렇게 정리할 수 있다.
new = 클래스를 생성하는 예약어
인스턴스 = 생성된 클래스
참조변수 = 인스턴스를 가리키는 클래스형 변수
ex)
Student A = new Student();
객체 | = 클래스 | |
인스턴스 | = 클래스가 메모리 공간에 생성된 상태 (= 객체의 한종류) |
* 하나의 클래스로 부터, 여러개의 각각 다른 인스턴스를 생성할 수 있다
인스턴스와 메모리
지역 변수는 '스택 메모리'에, 인스턴스는 '힙 메모리'에 생성된다.
생성된 클래스를 참조변수 A에 대입하면,
인스턴스가 생성된 메모리(힙메모리)를 참조변수 A(스택메모리)가 가리킨다!
즉, 인스턴스의 힙메모리의 주소를 참조변수에 대입하는 것과 같다.
* 힙(heap) 메모리는 동적 메모리(dynamic memory) 공간.
동적으로 할당되며, 사용이 끝나면 메모리를 해제해주어야 함.
* 참조변수 값을 출력하면,
'클래스이름@주소값' 형태로 출력됨. 주소값은 해시코드값이다
* 해시코드(hash code) : 객체가 생성될 때, JVM 에서 할당해주는 가상주소값
생성자
: (constructor) 클래스 생성 시, 인스턴스 변수(멤버 변수 or 상수)의 초기화 하는 역할
ex) Student()
기본 생성자
: 생성자가 없는 클래스는, 자바 컴파일러가 컴파일 시 자동으로 생성자를 만든다.
이를 기본 생성자(default constructor)라고 한다.
- 매개변수(X), 구현코드(X)가 없는 것이 특징
단, 생성자가 초기화하고자 하는 멤버변수의 값을 직접 지정하고 싶을 때, 생성자를 직접 만들어 사용한다.
* 필요에 따라, 생성자를 여러개 만들어서 사용할 수 있음 (기본 생성자 포함, 단, 매개변수가 모두 달라야 함)
* 단, 디폴트 생성자를 일부러 구현하지 않는 경우도 많음!
- ex)
package test;
public class Person {
String name;
// 자동제공되는 디폴트 생성자
public Person() { }
// 직접 만든 생성자
public Person(String pname) {
name = pname; // 매개변수로 이름을 입력받아, 해당 값을 멤버변수로 가진 class생성
}
}
생성자 오버로드
: (constructor overload) 클래스에 생성자가 두 개 이상 제공되는 경우
참조변수 사용
- 참조변수.멤버변수
- 참조변수.메서드
위처럼 도트(.)연산자를 사용해, 인스턴스의 멤버변수와, 메서드에 접근 할 수 있다.
참조자료형
ex)
- 과목 클래스
package reference;
public class Subject {
String subjectName;
int scorePoint;
}
- 학생 클래스
package reference;
public class Student3 {
int studentID;
String studentName;
// Subject 클래스를 이용해 선언
Subject korean;
Subject math;
}
변수의 사용
국어과목 이름 → korean.subjectName
수학과목 성적 → math.scorePoint
다음과 같이 접근하여 사용한다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
08. [Java] this 예약어 (0) | 2022.01.31 |
---|---|
07. [Java] 정보은닉 with 접근제어자 (public&private) (0) | 2022.01.31 |
05. [Java] 클래스의 기본구조 & Main 함수 사용 (0) | 2022.01.31 |
04. [Java] 연산자 (0) | 2022.01.31 |
03. [Java] 자료형 (0) | 2022.01.31 |