기본자료형 (PDT) VS 사용자정의자료형 (UDDT)

Kyu·2021년 1월 12일
0

Java 공부기록

목록 보기
7/40

기본자료형 Primitive data type VS 사용자정의자료형 User defined data type

정수, 실수, 문자, 불같은 기본자료형은 처음에 배우기때문에 익숙하다.
그런데 업무에서 필요로하는 자료가 있다고 칠때,
예를들어 서점관리를 할때 필요한 데이터는 책이다.
영화예매 예약을 한다고 치면 필요한 데이터는 영화가 될것이다.
회원관리를 만든다면? 회원이 될 것이다.
성적처리를 만든다면? 성적이 될 것이다.
앞으로 취급하는 데이터가 이런 데이터이고 기본자료형과는 다르다.

이런 자료들을 메모리에 저장하려면 어떻게 해야할까?
변수는 데이터타입을 결정을 해야한다. 자료형이없으면 변수를 만들수 없다.
int, float, char, boolean 같은 자료형은 기본적으로 제공해주는 자료형이다.
하지만 영화 회원 성적 이런 데이터는 기본적으로 제공하지 않는다.
그래서 직접만들어서 사용해야한다.
이런자료를 객체라고 한다. 이런 객체들은 만들어서 사용해야한다.
그리고 이러한 사용자정의자료형을 만드는 도구를 클래스라고 한다.

이제 비교해보자.

int a;
BookDTO b;

여기서 a도 변수이고 b도 변수이다.
int는 정수형자료이다. 정수를 저장할수있도록 선언한거다.

기본자료형(PDT)
컴파일러에서 기본적으로 제공해주는 자료형

b는 책을 넣어야한다.
하지만 책이라는 자료형은 직접 만들어야한다.
책이 뭐냐고 물으면, 제목, 가격, 출판사, 페이지수 등의 속성으로 이루어진게 책이라고 할것이다
BookDTO 자료형을 쓰기 위해서는 class로 새로운 자료형을 속성들을 가지고 설계해야한다.

public class BookDTO {
	public String title;
	public int price;
	public String company;
	public int page;

	public BookDTO(){
		super();
		}
}

먼저 이름을 정해주고 책을 이루고 있는 속성을 넣는다. title, price, company, page 등.
클래스를 아파트(설계도)라고 하면 앞으로 만들어질 모델하우스(모형)이 있을 것이다. 그런 뒤에,
모델하우스를 공사해서 땅에다가 실제로 아파트를 만든다면 땅은 메모리라 할 수 있고 공사를 객체를 생성한다고 할수있고 실체가 BookDTO라고 할수있다
속성들은 클래스안에서 하나의 그룹이 되고 BookDTO를 그림으로 나타내면 아래와 같을 것이다.
이것을 객체라고 한다.

                             Heap Area
-----------------------------------------------------------------
|		|		|		|		|
-----------------------------------------------------------------
	title		price		company		page
	|______________________BookDTO_____________________|

프로그래밍에서는 기억공간 여러개를 묶어서 BookDTO라고 하면 책이라고 한다
이런 구조로 된 객체가 메모리에 만들어지고 이 과정을 객체생성과정이라고 한다.

객체 생성은 어떻게 하나?
new라는 연산자를 적어야한다.
객체를 메모리에 생성하는 메소드가 있는데 그것을 생성자 메소드라고 한다.
new는 명령어이다.

실제로 클래스 안에 이런 객체를 생성하는 메소드가 있어야하는데 없다.
기본적으로 객체를 설계하면 멤버들을 메모리에 생성하는 역할을하는 생성자 함수가 생략이 되어있다
생성자함수는 다음과 같이 생겼다

public BookDTO() {
	super();
}

생성자함수는 이름이 같고 리턴타입이 없는 독특한 형태를 띈다.
하지만 생성자함수를 만들지않아도 기본적으로 들어가는데 그것을 기본생성자(default structor)라고한다.
사실 생성자함수에 아무것도 없어서 아무런 일도 하지 않는거처럼 보이지만,
기계어 코드 단에서 자기자신이 만들어놓은 멤버(속성)들을 메모리에 올려서 객체가 실제로 만드는 작업을 하도록 내부적으로 설계가 되어있다. 그래서 이름이 생성자였구나.

BookDTO b;
// BookDTO가 메모리에 올려져 번지를 가지고 있기때문에 데이터타입으로 사용가능하다.

b = new BookDTO();
// 생성자 연산자 new를 통해 BookDTO()생성자를 만들어서 b가 BookDTO의 번지를 가리키게 한다.

생성자를 통해서 메모리에 BookDTO가 생성되면서 번지가 붙는데, b에 바로 번지를 받는다.
b는 BookDTO 타입을 가리키고 있다. 그래서 데이터타입을 BookDTO b; 라고 쓸수있다.
객체가 메모리에 만들어지면, this 라는 객체도 만들어진다. this 는 BookDTO 자기자신을 가리키는 객체이다.

참고
BookDTO 안에는 여러가지 데이터타입이 들어가서 배열로는 객체를 만들수없다

자문자답
질문: BookVO class를 선언하고 상태정보들을 넣었을때 이미 메모리에 올라와져있는건가?
답변: 그렇다.이미 JVM의 class loader가 class들을 메모리에 적재하기 때문

profile
TIL 남기는 공간입니다

0개의 댓글