자바의 Class에 대해 학습하기
클래스와 객체의 관계는 붕어빵 틀과 슈크림/팥 붕어빵의 관계와 같다.
소스파일을 생성한다.
클래스명.java
$
, _
외의 특수문자 ❌String
, for
EarPhone
클래스를 선언한다.
public class Tv {
// 필드
private String color;
private boolean power;
private int channel;
// 생성자
public Tv(String Color) {
this.color = color;
}
// 메소드
public void power() { power = !power; }
public void channelUp() { channel++; }
public void channelDown() { channel--; }
public void setColor(String Color) { this.color = color; }
}
power
를 private
으로 설정해 외부에서 접근하지 못하도록 막았다. `power()
를 통해 power
를 변경해줄 수 있다.public
키워드가 붙은 클래스는 단 하나만 존재해야하며 이 클래스는 소스 파일 이름과 동일한 이름을 가져야 한다.클래스명 변수명 = new 클래스명();
new
키워드를 통해 클래스 정의를 바탕으로 객체를 생성한다.[접근 제어자] [반환 자료형] [메소드명] ([매개변수]) { ... }
: 클래스, 멤버변수, 메서드 그리고 생성자에 사용되어, 외부에서 접근하지 못하도록 제한하는 역할을 한다.
종류(접근할 수 있는 범위에 따라 나뉨)
public > protected > (default) > private
사용가능한 접근 제어자
대상 | 접근 제어자 |
---|---|
클래스 | public, (default) |
메소드 | public, protected, (default), private |
멤버 변수 | public, protected, (default), private |
지역 변수 | 없음 |
: 사용자는 해당 메소드를 실행한 후 어떤 자료형의 값을 반환받는지 확인할 수 있다.
return
키워드를 사용해서 반환하는 값의 자료형이 메소드의 반환 자료형과 일치해야 한다.setColor()
: 메소드 안에서 필요한 값들을 메소드 외부로부터 전달받을 수 있다.
class 클래스명 {
클래스명() { ... } // 기본 생성자
}
: 클래스명과 동일한 이름의 메소드를 선언한다.
: 객체 자기자신을 의미한다.
this.필드
사용
: 객체의 필드라는 것을 강조하기 위해 쓰인다.
class Car {
private String color;
Car(String color) {
this.color = color;
}
}
color
변수를 사용한다면 가장 가까운 스코프인 매개변수의 color
가 호출이 된다.color
를 사용하고 싶다면 this
키워드를 사용하자.생성자안에서 this()
사용
: 자신이 속한 클래스의 다른 생성자를 호출하기 위해 사용한다.
class Car {
private String color;
Car() {
this("black");
}
Car(String color) {
this.color = color;
}
}
객체 자신으로서의 this
사용
: 객체의 참조값을 전달하기 위해 사용한다.
// in StringBuilder class
@Override
public StringBuilder append(String str) {
super.append(str);
return this;
}
// in Main class
StringBuilder stringBuilder = new StringBuilder();
builder.append("A").append("B");
this
키워드로 반환하고 있다.: 자식 노드 수가 두 개 이하인 트리
분류
💡 트리란?
: 순환 구조가 없는 그래프
- 트리 구조로 배열된 일종의 계층적 데이터의 집합이다.
- 임의의 두 노드 사이의 경로는 유일무이하게 존재한다.
- 구성
- 루트 노드 : 가장 위에 있는 노드
- 리프 노드 : 자식 노드가 없는 노드
- 내부 노드 : 루트 노드와 리프 노드 사이에 있는 노드
- 깊이와 높이
- 깊이(= 레벨) : 루트 노드부터 특정 노드까지 최단 거리로 갔을 때의 거리
- 높이 : 루트 노드부터 리프 노드까지의 거리 중 가장 긴 거리
🧐 요구사항
int value
,Node left
,Node right
필드를 가져야함
public class Node {
private Node left;
private Node right;
private int value;
public Node(Node left, Node right, int value) {
this.left = left;
this.right = right;
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;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
🧐 요구사항
- 주어진 노드를 기준으로 출력하는
bfs(Node node)
와dfs(Node node)
메소드 구현
- DFS는 왼쪽, 루트, 오른쪽 순으로 순회
BinaryTree 구현
import java.util.LinkedList;
import java.util.Objects;
import java.util.Queue;
public final class BinaryTree {
private BinaryTree() {
}
public static void bfs(Node root) {
Queue<Node> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
Node node = queue.poll();
System.out.print(node.getValue() + " ");
if (!Objects.isNull(node.getLeft())) {
queue.add(node.getLeft());
}
if (!Objects.isNull(node.getRight())) {
queue.add(node.getRight());
}
}
System.out.println();
}
public static void dfs(Node root) {
if (Objects.isNull(root)) return;
dfs(root.getLeft());
System.out.print(root.getValue() + " ");
dfs(root.getRight());
}
}
BinaryTree 테스트
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
class BinaryTreeTest {
private static Node root;
@BeforeEach
void setUp() {
Node node10 = new Node(null, null, 10);
Node node9 = new Node(null, null, 9);
Node node8 = new Node(node10, null, 8);
Node node7 = new Node(null, node9, 7);
Node node6 = new Node(node8, null, 6);
Node node5 = new Node(null, null, 5);
Node node4 = new Node(node7, null, 4);
Node node3 = new Node(node5, node6, 3);
Node node2 = new Node(node4, null, 2);
root = new Node(node2, node3, 1);
}
@Test
void bfs() {
BinaryTree.bfs(root);
}
@Test
void dfs() {
BinaryTree.dfs(root);
}
}
bfs
1 2 3 4 5 6 7 8 9 10
dfs
7 9 4 2 1 5 3 10 8 6
Reference
- 자바의 정석 3rd Edition, 남궁성 지음
- 5주차 : 클래스
- [백기선님과 함께하는 Live-Study] 5주차 - 클래스