kosta 클라우드 네이티브 애플리케이션 개발 과정 day 8
객체를 어떻게 만들까?
=> 추상화 작업부터
=> 상태, 행동 분석
=> 필드, 메서드
-> 클래스 만들기
=> 상태 -> 필드
=> 기능 -> 메서드
만든 객체를 불러오기
Account account = new Account();
클래스 변수를 선언해주는 것 => 인스턴스 변수를 만든다.
Account account;
new 연산자를 통한 객체 생성 = 인스턴스화
=> 객체가 생성되면서 객체, 메서드에 대한 독립적인 메모리가 할당된다.
e.g. person 객체를 생성하고 해당 객체를 소환한다고 해보자.
public person (){
int id;
String name;
public person(int id, String name){
this.id = id;
this.name = name;
}
}
public PersonBuilder(){
public static person buildPerson(int id, String name){
return person(id, name);
}
public static void main(){
int id = 12;
String name = "john";
Person person = null;
person = buildPerson(id, name);
기본 타입 변수들은 stack에 저장, 포인터를 stack에 저장, object 는 heap에 저장
String은 heap space의 pool에 저장한다.
생성자 (constructor)
- 객체(필드)를 초기화 역할
- 객체를 생성할 때 파라미터값을 전달할 수 있다.
생성자는 호출하지 않아도 생성되면서 호출된다. = new 연산자를 통해서
생성자 구현하기
접근 제어자 + 클래스명(withOrWithOut 파라미터){
필드 초기화 !
}
생성자와 메서드를 구분하는 방법
- 이름
- 리턴형을 갖고 있지 않다
생성자의 3가지 종류
- No-argument constructor
- Parameterized Constructor
- Default Constructor
매개변수를 받는 생성자 구현 예시
public Account(String accountNo, String ownerName, int balance){
this.accountNo = accountNo;
this.ownerName = ownerName;
this.balance = balance;
}
현재 객체의 필드 값을 특정해주는 "this" 명령어를 쓴다.
생성한 객체를 불러오기
public static void main(String[] args) {
String accountNo = "123-1234";
String ownerName = "홍길동";
int balance = 1000;
Account account = new Account(accountNo, ownerName, balance);
System.out.println(account.accountNo);
System.out.println(account.ownerName);
System.out.println(account.balance);
}
생성자는 객체를 생성하는 가이드 역할을 한다 !
e.g.
StringBuffer() 생성시 String, int, character를 넣으면 문제가 되지 않지만 double 형을 넣을 때 에러가 발생한다 !
정의된 생성자에 double이 없기 때문이다.
즉 생성자는 객체 생성의 가이드라인을 제공한다.
객체를 이용하여 간단한 게시판을 구현해보자.
글번호, 제목, 작성자, 글 내용을 포함하는 내용으로
게시판 글을 몇 개 생성하고 내용을 출력하는 메서드를 구현하기
package kosta.basic.day008.boardExample2;
public class Board {
// 특성 : 글번호, 제목, 작성자, 글내용
// 기능 : 출력하는 메서드
String no;
String title;
String writer;
String contents;
public Board(){}
public Board(String no, String title, String writer, String contents) {
this.no = no;
this.title = title;
this.writer = writer;
this.contents = contents;
}
public void print(){
System.out.printf("%s %s %s %s \n", no, title,writer,contents);
}
}
package kosta.basic.day008.boardExample2;
public class BoardMain {
public static void main(String[] args) {
Board board1 = new Board();
board1.print();
Board board2 = new Board("1", "java", "홍길동", "자바 잘하자 !");
Board board3 = new Board("2", "db", "박길동", "db 잘하자 !");
board2.print();
board3.print();
}
}
서로 같은 데이터 타입을 모으기 -> 배열을 사용해보자 !
private static void practiceObjectWithArray2() {
Board[] boards = {
new Board("1", "java", "홍길동", "자바 잘하자 !"),
new Board("2", "db", "박길동", "db 잘하자 !")
};
for (Board board : boards){
board.print();
}
}
private static void practiceObjectWithArray() {
Board[] boards = new Board[2];
boards[0] = new Board("1", "java", "홍길동", "자바 잘하자 !");
boards[1] = new Board("2", "db", "박길동", "db 잘하자 !");
for (Board board : boards){
board.print();
}
}
가격과 할인 가격을 가진 객체를 생성해보자.
package kosta.mission2.mission2_05.solution2;
public class Book {
// 상태 : 책이름, 정가, 할인된 가격
// 기능 : 할인된 가격을 산출, 책 정보 출력
String bookName;
int price;
int discountedPrice;
private static final String notificationEach = "%s 교재는 정가는 %d원, 할인된 가격은 %d원 입니다.\n";
private static final String notificationTotal = "총금액 %d원\n";
Book() {
}
public Book(String bookName, int price) {
this.bookName = bookName;
this.price = price;
}
public void discount() {
if (price >= 30000) {
this.discountedPrice = calculatePrice(price, 25);
return;
}
if (price >= 15000) {
this.discountedPrice = calculatePrice(price, 20);
return;
}
this.discountedPrice = calculatePrice(price, 15);
}
public void printEach(){
System.out.printf(notificationEach, bookName, price, discountedPrice);
}
public int calculatePrice(int price, int discountedPrice) {
return price * (100 - discountedPrice) / 100;
}
}
호출하기
package kosta.mission2.mission2_05.solution2;
public class BookMain {
public static void main(String[] args) {
int total = 0;
Book[] books = {
new Book("java", 30000),
new Book("jsp", 20000),
new Book("oracle", 15000)
};
for (Book book : books){
book.discount();
book.printEach();
total+= book.discountedPrice;
}
System.out.printf("총금액 : %d원", total);
}
}
default 객체를 생성하는 이유
parameterized constructor를 만든 상태에서 default constructor를 소환하면 에러가 발생한다 !
parameterized 가 만들어지지 않았다면 자동으로 (암묵적으로) default가 생성되어 있다.
'교육 > Java&Spring' 카테고리의 다른 글
java & spring 2 (1) | 2022.12.31 |
---|---|
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 9 (0) | 2022.12.30 |
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 7 (0) | 2022.12.28 |
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 6 (0) | 2022.12.28 |
kosta 클라우드 네이티브 애플리케이션 개발 과정 day 5 (0) | 2022.12.26 |