반응형
# 기본 자료형(PDT), 사용자 정의 자료형(UDDT)
## 기본 자료형 (PDT)
- 컴파일러에서 기본적으로 제공해주는 자료형.
int a;
a는 DataType int 이므로 정수가 들어갈 수 있음.
## 사용자 정의 자료형 (UDDT)
- 사용자가 직접 만들어서 사용하는 자료형.
BookDTO b;
b는 DataType이 BookDTO로 사용자가 직접 만든 자료형.
class로 새로운 자료형을 만들어야 함.
public class BookDTO {
public String title;
public int price;
public String company;
public int page;
}
- 기본 생성자 (default constructor) : 위와 같이 클래스를 설계하게 되면 기본적으로 기본생성자(default constructor)가 들어있음. (생성자 메서드가 해당 클래스가 갖고있는 멤버들(title, price, company, page)을 메모리에 객체로 만드는 역할을 하므로 생성자 메서드는 반드시 있어야 함.)
public BookDTO() {
super();
}
- new 연산자 : 객체 생성은 생성자 메서드를 사용하여 생성한다.
BookDTO b = new BookDTO();
## 사용자 정의 자료형(실습)
import kr.tpc.BookDTO;
public class TPC10 {
public static void main(String[] args) {
// 기본 자료형 : int, float, char, boolean 등 -> PDT
int a = 10;
// 사용자 정의 자료형 : 예로 책(BookDTO) 자료형 생성. -> UDDT
BookDTO b = new BookDTO(); // 객체 생성 : 생성자 메서드 호출하여 객체 생성.
b.title = "사용자 정의 자료형 책";
b.price = 15000;
b.company = "길벗";
b.page = 300;
System.out.println("== 책(BookDTO) 자료형 =="
+ "\n책명 : " + b.title
+ "\n가격 : " + b.price
+ "\n출판사명 : " + b.company
+ "\n페이지 수 : " + b.page);
}
}
# 객체 생성과정
## 객체 생성과정 (객체가 메모리에 어떻게 만들어지는지.)
- VO는 Value Object를 의미.
BookVO b = new BookVO(); // new 연산자와 생성자메서드 호출하여 객체 생성.
- 현실세계에 존재하는 책(Object) 이라는 객체를 프로그램에서 사용하기 위해 객체를 만들기위해서는 상태정보(변수) 와 행위정보 가 필요하다.
- 상태 정보(변수, attribute, property, member) : 책의 상태정보가 될 만한건 제목, 출판사, 가격, 페이지 수, 저자, 재질 등 존재.
- 모델링 (Modeling) : 필요한 속성만 뽑아내는 과정
- 상태정보를 모델링하여 필요한 정보만 간추림 (제목, 출판사, 가격, 페이지 수)
- 행위 정보(동작, method, 기능(function))
### 클래스 설계
public class BookVO {
public String title;
public int price;
public String company;
public int page;
}
### 객체생성
- 클래스를 설계하고 설계한 대로 메모리에 기억공간을 만드는 과정.
- 아래와 같이 입력하여 생성
BookVO b = new BookVO(); // new 연산자와 생성자메서드 호출
- 여기서 b는 변수로, 번지값이 들어있다.
### 객체생성 후 접근 방법 ( .(dot) 연산자)
- dot(.) (접근 연산자, 참조 연산자) : b에 .(dot)연산자를 사용하여 상태정보(변수)에 접근한다. 이때 상태정보가 public인 경우만 접근 가능하다.
b.title = "가나다라 책";
b.price = 15000;
b.company = "길벗";
b.page = 150;
- 위와같이 객체의 상태정보를 직벚 접근하게 되면 잘못된 데이터가 저장될 수 있다. 그래서 정보은닉(Information Hiding private)이 필요함. (이를 위해서는 상태정보를 public이 아닌 private으로 해야 함.)
## 객체 생성(실습)
package kr.tpc;
// 책(Object) -> 제목, 가격, 출판사, 페이지수
public class BookVO {
public String title;
public int price;
public String company;
public int page;
// 디폴트 생성자 메서드(생략)
}
import kr.tpc.BookVO;
public class TPC11 {
public static void main(String[] args) {
// 책 1권을 저장하기 위한 객체 생성.
BookVO book1 = new BookVO();
book1.title = "갓바의 정석1";
book1.price = 10000;
book1.company = "길";
book1.page = 100;
System.out.println("== 책(BookVO) 자료형 =="
+ "\n책명 : " + book1.title
+ "\n가격 : " + book1.price
+ "\n출판사명 : " + book1.company
+ "\n페이지 수 : " + book1.page);
BookVO book2 = new BookVO();
book2.title = "갓바의 정석2";
book2.price = 30000;
book2.company = "길";
book2.page = 300;
System.out.println("== 책(BookVO) 자료형 =="
+ "\n책명 : " + book2.title
+ "\n가격 : " + book2.price
+ "\n출판사명 : " + book2.company
+ "\n페이지 수 : " + book2.page);
}
}
# 생성자 메서드 (Constructor)
- 객체를 생성할때 사용되는 메서드
- 객체 생성 후 객체의 초기화를 하는 역할을 수행한다.
- 특징은 아래와 같다.
1. 클래스이름과 동일한 메서드
public class BookVO {
public String title;
public int price;
public String company;
public int page;
public BookVO() {
super();
}
}
2. 메서드의 return type이 없다. (void 아님)
public BookVO() {
super();
}
3. public 접근 권한을 가진다. (단, private 생성자도 있음)
BookVO b = enw BookVO(); 시 BookVO() 호출하기 때문에 public 으로 해야 함.
(하지만 무조건 public인건 아님.)
public BookVO() {
super();
}
4. 생성자가 없을 때는 기본 생성자가 만들어진다.)
public BookVO() {
super();
}
위와 같이 생성자가 없을 시 컴파일러가 기본 생성자(default constructor)를 자동으로 넣어줌.
## 객체 초기화
- 생성자 메서드를 활용하여 객체를 초기화.
- this : 자기 자신을 가리키는 객체.
- Overloading Constructor : 초기화를 위해 중복 정의된 생성자
- 생성자의 가장 큰 역할은 초기화.
public class BookVO {
public String title;
public int price;
public String company;
public int page;
// 초기화
public BookVO(String title, int price, String company, int page) {
this.title = title;
this.price = price;
this.company = company;
this.page = page;
}
}
BookVO book = new BookVO("갓바의 정석", 30000, "길", 300); // 초깃값
## 생성자 중복정의(Overloading)
- 생성자 중복정의란 하나의 메서드 안에 이름이 같은 메서드가 중복정의 되는 것. 객체지향에서 메서드 이름이 같아도 되지만 이 경우 매개변수의 갯수는 달라져야 함.
BookVO book = new BookVO();
BookVO book = new BookVO("갓바의 정석", 30000, "길", 300);
package kr.tpc;
// 책(Object) -> 제목, 가격, 출판사, 페이지수
public class BookVO {
public String title;
public int price;
public String company;
public int page;
// 디폴트 생성자 메서드(생략)
public BookVO() {
this.title = "갓바의정석";
this.price = 30000;
this.company = "갓바";
this.page = 300;
}
// 생성자 메서드 중복정의(Overloading)
public BookVO(String title, int price, String company, int page) {
this.title = title;
this.price = price;
this.company = company;
this.page = page;
}
}
- 만약 아래와 같이 생성자가 한개 존재한다면, 기본 생성자는 만들어지지 않음.
package kr.tpc;
// 책(Object) -> 제목, 가격, 출판사, 페이지수
public class BookVO {
public String title;
public int price;
public String company;
public int page;
// 생성자 메서드 중복정의(Overloading)
public BookVO(String title, int price, String company, int page) {
this.title = title;
this.price = price;
this.company = company;
this.page = page;
}
}
## 생성자(실습)
package kr.tpc;
// 책(Object) -> 제목, 가격, 출판사, 페이지수
public class BookVO {
public String title;
public int price;
public String company;
public int page;
// 디폴트 생성자 메서드(생략)
public BookVO() {
// 초기화 작업. this는 생략 가능하지만, this를 명시해주는게 가독성에 좋음.
this.title = "갓바의정석";
this.price = 30000;
this.company = "갓바";
this.page = 300;
}
// 생성자 메서드 중복정의(Overloading)
public BookVO(String title, int price, String company, int page) {
this.title = title;
this.price = price;
this.company = company;
this.page = page;
}
}
import kr.tpc.BookVO;
public class TPC12 {
public static void main(String[] args) {
// 생성자 -> 객체 생성 + 초기화하는 메서드. 생성자는 메서드를 중복정의할 수 있음
BookVO book1 = new BookVO();
System.out.println("== 책(BookVO) 자료형 ==\n"
+ "책명 : " + book1.title
+ "\t가격 : " + book1.price
+ "\t출판사명 : " + book1.company
+ "\t페이지 수 : " + book1.page);
// 원하는 값으로 초기화
BookVO book2 = new BookVO("강산", 10000, "길", 150);
System.out.println("\n== 책(BookVO) 자료형 ==\n"
+ "책명 : " + book2.title
+ "\t가격 : " + book2.price
+ "\t출판사명 : " + book2.company
+ "\t페이지 수 : " + book2.page);
}
}
반응형
'인프런 강의 학습 > Java TPC' 카테고리의 다른 글
Java TPC_9일차 정보은닉 / 잘 설계된 클래스 (0) | 2022.01.10 |
---|---|
Java TPC_8일차 private 생성자 / class, object, instance 상호관계 (0) | 2022.01.09 |
Java TPC_6일차 메서드의 매개변수 전달기법(parameter passing) / JVM의 메모리 모델 (0) | 2022.01.06 |
Java TPC_5일차 변수와 메서드(method) (0) | 2022.01.05 |
Java TPC_4일차 변수와 배열 / 1차원 배열, 2차원 배열, 가변길이 배열(Array) (0) | 2022.01.04 |