반응형

# 기본 자료형(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);	
	}
}
반응형

+ Recent posts