Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

보근은 참고 있다

5주차 과제: 클래스 본문

Language/자바 정리 할래

5주차 과제: 클래스

보근 2020. 12. 19. 12:43

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

클래스 정의하는 방법

 

 클래스란, 모든 Java 프로그램의 가장 기본적인 구조를 이루는 요소이다. 클래스는 필드와 메소드를 포함하며 새로운 참조 타입을 정의하기도 한다.

 

클래스의 기본 구성

  • 필드 변수(멤버 변수)
  • 메소드
  • 생성자

 

class MyClass {

    String name;  //  멤버 변수들
    int age;
    
    public MyClass() {  // Default 생성자
    }
    
    public MyClass(String name, int age) {  // AllArgs 생성자
        this.name = name;
        this.age = age;
    }
    
    public void print() {  // 메소드
        System.out.println("name = "+name+" age = "+age);
    }
    
}

 

 

 

 

 

 

 

 

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

 

 객체를 만드는 방법은, 클래스 타입의 변수를 정의 후 인스턴스로 초기화 시켜주는 방법이 제일 기본적이다. 인스턴스를 만드는 방법은 new 키워드와 생성자 함수를 이용하는 것이다. 

 

생성자 함수의 작동 방식

 

  1. new 키워드로 인해 새로운 인스턴스를 만든다고 알림.
  2. 새로운 인스턴스를 보유할 수 있도록 메모리가 할당됨.
  3. 생성자 함수의 내용대로 생성자가 호출됨. (Default or 지정된 인자로 이뤄진 생성자)
  4. 정의된 생성자 함수를 따라 만들어진 인스턴스가 생성됨.

 

 

class MyClass {

    String name;
    int age;
    
    public MyClass() {
    }
    
    public MyClass(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
}

class Main {
   public static void main(String[] args) {
       
       MyClass myClass1 = new MyClass();  //  기본 생성자로 생성된 객체
       MyClass myClass2 = new MyClass("bogeun", 20);  //  모든 인자를 받는 생성자로 생성된 객체

 

 

 

 

 

 

 

 

메소드 정의하는 방법

 

 메소드는 접근 제한자, 반환 타입, 메서드 명, 파라미터, 메소드 블럭으로 이뤄져 있다.

 

public void myPrint(String text) {
	System.out.println("text is "+text);
}

 

 

접근 제한자

 

  • public : 모든 클래스의 접근을 허용한다.
  • private : 자기 자신(객체)만 접근을 허용한다.
  • protected : 같은 패키지의 클래스 + 자식 클래스에만 접근을 허용한다.
  • default : 같은 패키지의 클래스만 접근을 허용한다.

 

반환 타입

 

 반환 타입은 프리미티브 타입부터 참조 타입까지 전부 올 수 있으며, return으로 결과를 반환한다. void는 반환 타입이 없다는 의미로 return되는 값이 없다. void에서 return을 호출하면 메소드 호출 위치로 제어가 넘어간다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

생성자 정의하는 방법

 

 생성자 함수는 클래스의 인스턴스를 생성하는 함수이다. 

 

 

Default 생성자

 

 인자를 아무것도 받지 않는 생성자 함수로, 아무런 생성자 함수도 정의하지 않으면 기본적으로 사용할 수 있다.

 

class MyClass {

    public MyClass() {
    }
    
}


class MyClass {  //  기본 생성자 정의가 없어도 위와 같이 동작한다.
}

 

 필드에 따라 여러가지 생성자 함수를 정의할 수도 있다.

 

class MyClass { 

    String name;
    int age;
    boolean isMale;
    
    public MyClass(String name) {  // name 필드만 받는 생성자
        this.name = name;
        this.isMale = true;  // default 값처럼 설정할 수도 있다.
    }
    
    public MyClass(String name, int age, boolean isMale) {  // 모든 인자를 다 받는 생성자
        this.name = name;
        this.age = age;
        this.isMale = isMale;
    }
    
}  // 기본 생성자를 정의하지 않은채 다른 생성자 함수를 정의했기 때문에 기본 생성자는 사용 불가하다.

 

 

 

 

 

 

 

 

 

this 키워드 이해하기

 

 this 키워드는 자기 자신의 객체를 가리키는 키워드이다.

 

class MyClass {

    String name;
    int age;
    
    public MyClass(String name, int age) {
        
        this.name = name;  //  this.name은 이 객체의 필드 변수 name을 가리킨다.
        this.age = age;    //  반면에 오른쪽의 name은 파라미터로 받은 name을 가리킨다.
    }

}

 

  • this와 비슷한 super는 상속받은 부모의 객체를 가리키는 지시자이다.
  • this()는 같은 클래스의 다른 생성자를 호출한다.

 

public class MyClass {

    String name;
    int age;

    public MyClass() {
        this("bogeun", 15);  //  아래에 있는 생성자 함수를 호출한 경우.
    }
    
    public MyClass(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

 

 

 

 

 

 

 

 

 

과제 

 

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

 

 

 

아래 예시의 이진 트리 모양

 

 

 

 

Node 클래스

class Node {
    int value;
    Node left;
    Node right;

    public Node(int value) {
        this.value = value;
    }

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

 

 

BinaryTree 클래스

public class BinaryTree {

    Queue<Node> queue = new LinkedList<>();

    public void bfs(Node node) {
        if(node.left != null) {
            queue.add(node.left);
        }
        if(node.right != null) {
            queue.add(node.right);
        }

        System.out.print(node.value+" ");

        if(queue.size() != 0) {
            bfs(queue.remove());
        }
    }
    
    public void dfs(Node node) {  // 중위 순회 좌 탐 우
        if(node.left != null) {
            dfs(node.left);
        }

        System.out.print(node.value+" ");

        if(node.right != null) {
            dfs(node.right);
        }
    }
}

 

 

 

결과 출력

public class Main {
	
    public static void main(String[] args) {
        
        Node node = new Node(1, new Node(2, new Node(4), new Node(5))
                  , new Node(3, new Node(6), new Node(7)));
                  
        BinaryTree bt = new BinaryTree();
        
        bt.bfs(node);  // 1 2 3 4 5 6 7
        bt.dfs(node);  // 4 2 5 1 6 3 7
    
    }
    
}

 

 

 

 

 

 

 

 

 

 

 

'Language > 자바 정리 할래' 카테고리의 다른 글

7주차 과제: 패키지  (0) 2020.12.30
6주차 과제: 상속  (0) 2020.12.21
4주차 과제: 제어문  (0) 2020.12.12
3주차 과제: 연산자  (0) 2020.11.24
2주차 과제: 자바 데이터 타입, 변수 그리고 배열  (0) 2020.11.18
Comments