본문 바로가기
교육/Java&Spring

kosta 클라우드 네이티브 애플리케이션 개발 과정 day 8

by Renechoi 2022. 12. 30.

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가 생성되어 있다. 

 

 

 

반응형