본문 바로가기
Programming/Java

[whiteship 온라인 스터디] 5주차 과제: 클래스

by 읽고 쓰는 개발자 2020. 12. 26.

github.com/whiteship/live-study/issues/5

 

5주차 과제: 클래스 · Issue #5 · whiteship/live-study

목표 자바의 Class에 대해 학습하세요. 학습할 것 (필수) 클래스 정의하는 방법 객체 만드는 방법 (new 키워드 이해하기) 메소드 정의하는 방법 생성자 정의하는 방법 this 키워드 이해하기 마감일시

github.com

 

목표

자바의 Class에 대해 학습하세요.

학습할 것 (필수)

  • 클래스 정의하는 방법
  • 객체 만드는 방법 (new 키워드 이해하기)
  • 메소드 정의하는 방법
  • 생성자 정의하는 방법
  • this 키워드 이해하기

    과제 (Optional)

    • int 값을 가지고 있는 이진 트리를 나타내는 Node 라는 클래스를 정의하세요.
    • int value, Node left, right를 가지고 있어야 합니다.
    • BinrayTree라는 클래스를 정의하고 주어진 노드를 기준으로 출력하는 bfs(Node node)와 dfs(Node node) 메소드를 구현하세요.
    • DFS는 왼쪽, 루트, 오른쪽 순으로 순회하세요.


1. 클래스 정의하는 방법

클래스명 작성 규칙

하나 이상의 문자로 이루어져야 한다.
첫 번째 글자는 숫자가 올 수 없다.
'$' , '_' 외의 특수 문자는 사용할 수 없다.
자바 키워드(예약어)는 사용할 수 없다.
  • 클래스 구성 멤버
    • field : 객체의 데이터가 저장되는 곳 (변수 아님. 객체와 함께 생성+소멸)
    • constructor : 객체 생성 시 초기화 역할 담당
    • method : 객체의 동작에 해당되는 실행 블록 

2. 객체 만드는 방법 (new 키워드 이해하기)

 new 연산자 : 클래스로부터 객체를 생성시키는 연산자. new 키워드 뒤에는 생성자가 온다.

new 연산자로 생성된 객체는 메모리 힙(heap) 영역에 생성되며, 객체의 주소가 리턴된다.

클래스 변수 = new 클래스(); // new 연산자와 생성자로 새로운 객체 생성 후 주소값 리턴

3. 메소드 정의하는 방법

이미지 출처 : https://jeeneee.dev/java-live-study/week5-class/

4. 생성자 정의하는 방법

만약 생성자를 따로 정의하지 않으면 컴파일러가 디폴트 생성자를 생성 해준다.

클래스 (매개변수선언, .. ) {
	//객체의 초기화 코드
}

5. this 키워드 이해하기

this : 객체 자신을 가리킨다.

주로 객체 내부에서 인스턴스 멤버에 접근하기 위하여 사용

Car(String model) {
	this.model = model;		//this.model : 인스턴스 멤버, model : 매개변수
}

6. 과제 

Node 클래스 정의 

package exam;

public class Node {
    public int val;
    public Node left;
    public Node right;
    
    
    public Node(int val, Node left, Node right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
};

DFS & BFS

import java.util.ArrayList;
import java.util.List;

public class BinaryTree {

    private Node BinaryTree(int data, Node nowNode) {
        if(nowNode == null) return new Node(data);
        if(nowNode.val > data) nowNode.left = BinaryTree(data, nowNode.left);
        if(nowNode.val < data) nowNode.right = BinaryTree(data, nowNode.right);
        return nowNode;
    }

    
    public void bfs(Node node) {
        List<List<Integer>> answer = new ArrayList<>();
        if(node == null) return answer;

        ArrayList<Integer> list = new ArrayList<>();
        list.add(node.val)
        answer.add(list);

        levelOrder(node, 1, answer);
        for(List<Integer> iList : answer) {
        	for(int i : iList) {
            	System.out.print(i+" ");
            }
        }
    }

    public void levelOrder(Node node, int depth, List<List<Integer>> answer) {
        if(answer.size() < depth + 1) {
            ArrayList<Integer> list = new ArrayList<>();
            if(node.left != null) list.add(node.left.val);
            if(node.right != null) list.add(node.right.val);
            if(list.size() != 0 ) answer.add(list);
        }else {
            List<Integer> list = answer.get(depth + 1);
            if(node.left != null) list.add(node.left.val);
            if(node.right != null) list.add(node.right.val);
        }
        if(node.left != null) levelOrder(node.left, depth + 1, answer);
        if(node.right != null) levelOrder(node.right, depth + 1, answer);
    }

    public void dfs(Node node) {
        if(node.left != null) dfs(node.left);
        System.out.print(node.val+" ");
        if(node.right != null) dfs(node.right);
    }
}

 

 

출처 : 이것이 자바다 ( 신용권 저)