똑같은 삽질은 2번 하지 말자

클래스 본문

STUDY HALLE

클래스

곽빵 2021. 1. 31. 14:47

목표

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

TodoList

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

과제 (Optional)

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

 

Class란 ? 

유사한 특징들의 지닌 객체들의 속성을 묶어놓은 그릇, 틀 같은 친구이다.

또는 어떤 하나의 물건을 만들기 위한 설계도 라고 생각해도 좋을것같다.

 

Class의 구성요소

필드(field)

클래스의 필드(field)란 클래스에 포함된 변수(variable)

 

1. 클래스 변수(static variable) 

2. 인스턴스 변수(instance variable)

3. 지역 변수(local variable)

 

메소드(method)

클래스에서 메소드(method)란 어떠한 특정 작업을 수행하기 위한 명령문의 집합

 

1. 클래스 메소드(static method)

2. 인스턴스 메소드(instance method)

 

생성자(constructor)

클래스를 생성할 때, 필드(인스턴스 변수) 값들을 초기화 시키기 위한 메소드

 

그럼 코드로 바로 작성해보자

밑의 목록을 해결해 나가면서

  • 클래스 정의하는 방법
  • 메소드를 정의하는 방법
  • 생성자를 정의하는 방법

 

객체를 만드는 방법(new 키워드에 대한 이해)

객체를 생성하기 위해서는 new라는 키워드를 써야한다.

Node sampleNode = new Node();

자 그럼 생성된 객체는 어디에 저장되어 있을까?

 

메모리 저장공간은 stack 과 heap이 있다.

프리미티브 타입은 stack에 저장되고

레퍼런스 타입은 heap에 저장된다.

 

new라는 키워드는 메모리상에 공간을 할당하고, 할당받은 공간을 주소를 리턴한다.

즉, sampleNode는 stack에 저장되며 주소값을 가지고 있으며 new Node()에 의해 생성된 객체는 heap에 저장된다.

this 키워드 이해하기

this는 객체(인스턴스) 자기자신을 가리키는 지정자로 흔히들 parameter와 필드명이 똑같을때,

구별짓기 위해서 사용한다.

public Node (T data, Node link) {
	data = data; // 이렇게 되면 param data안에 자기자신을 넣어버리는 꼴
	this.data = data; // 인스턴스 안의 data에 param data를 넣겠다.
	this.link = link;
}

 

또는 자기자신의 생성자를 부를때 도 활용가능한데, 예를 들면

	/* 생성자2 data만 초기화 시키는 생성자*/
	public Node (T data) {
		this(data, null); // 한개의 param으로 들어왔지만, 오버라이딩 param 2개의 생성자로 토스
	}
	/* 생성자3 data와 link를 초기화 시키는 생성자*/
	public Node (T data, Node link) {
		// data = data; 이렇게 되면 param data안에 자기자신을 넣어버리는 꼴
		this.data = data;
		this.link = link;
	}

이런식으로 활용가능하다.

 

과제 (Optional)

Node

public class Node {
	int value;

	Node left;

	Node right;

	public int getValue() {
		return value;
	}

	public void setValue(int value) {
		this.value = value;
	}

	public Node getLeft() {
		return left;
	}

	public void setLeft(Node left) {
		this.left = left;
	}
	
	public Node getRight() {
		return right;
	}
	
	public void setRight(Node right) {
		this.right = right;
	}

}

BinaryTree

public class BinaryTree {
	
	static List<Integer>result = new ArrayList<>();
	
	public static void bfs(Node node) {
		Queue<Node>queue = new LinkedList<>();
		queue.add(node);
		result.add(node.getValue());
		
		while(!queue.isEmpty()) {
			Node tempNode = queue.poll();
			if (!Objects.isNull(tempNode.getLeft())) {
				queue.add(tempNode.getLeft());
				result.add(tempNode.getLeft().getValue());
			}
			
			if (!Objects.isNull(tempNode.getRight())) {
				queue.add(tempNode.getRight());
				result.add(tempNode.getRight().getValue());
			}
		}
		for(Integer val : result) {
			System.out.print(val + " ");
		}
		
	}
	public static void dfs(Node node) {
		if(!Objects.isNull(node)) {
			return;
		}
		dfs(node.getLeft());
		result.add(node.getValue());
		dfs(node.getRight());
	}
}

'STUDY HALLE' 카테고리의 다른 글

제어문 조건문  (0) 2021.01.25
Comments