Java week5


5주차

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

클래스 정의하는 방법

규칙

  • 하나 이상의 문자
  • 첫 번째 글자는 숫자 불가능
  • ’$’, ‘_’ 이외의 특수 문자는 사용할 수 없음
  • 자바의 키워드(for int long…등)는 사용할 수 없다.
  • 일반적으로 파일당 하나의 클래스를 선언하지만, 두 개 이상의 클래스 선언이 가능
    • 두 개 이상의 클래스를 선언하고, 컴파일하면 바이트 코드 파일(.class)는 클래스 선언 수 만큼 생성된다.

예제

public class Week5 {
 
}

class Car {
    
}

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

선언

  • 객체를 생성하는 방법 = new 연산자 사용
  • new 연산자로 생성된 객체는 힙 메모리 영역에 생성된다.
    • 힙 메모리에 객체를 생성시키고, 객체의 주소를 리턴하도록 되어 있다.
    • 리턴된 주소를 참조 타입인 클래스 변수에 저장해 두면, 변수를 통해서 객체를 사용할 수 있음

예제

public class Week5 {

    public static void main(String[] args) {
        Car car1 = new Car();
        Car car2 = new Car();
    }
}

class Car {

}

  • 위에서 car1, car2 변수는 서로 다른 데이터를 가지면서, 독립된 메모리에서 활동

메소드 정의하는 방법

구성

  • 리턴, 메소드 이름, 매개변수 선언, 본분의 실행 블록으로 구성

예제

void println() {
    System.out.println("print");
}

int plus(int x, int y) {
    return x + y;
}

메소드 오버로딩

  • 같은 클래스 내에서 이름이 동일한 메소드를 선언하는 것
  • 매개변수 값을 다양하게 받아서 처리하는에 유용
public class Week5 {

    int plus(int x, int y) {
        return x + y;
    }
    
    int plus(int x, int y, int z) {
        return x + y + z;
    }
}

생성자 정의하는 방법

  • 위에서 new 연산자와 연관이 있다.
  • 객체를 생성할 때 호출되어 초기화를 담당한다.
    • 초기화: 클래스 내부에 선언된 필드를 초기화하거나, 메소드를 호출해서 객체를 사용할 준비를 한다
  • 생성자가 실행되지 않으면 객체는 생성되지 않는다

종류

  • 모든 클래스는 생성자가 반드시 존재하며, 하나 이상을 가질 수 있다.

  • 기본 생성자

    • 정의하지 않아도 컴파일러가 자동으로 기본 생성자를 바이트 코드에 추가한다.
Car basicCar = new Car(); //기본생성자
  • 생성자 선언
public class Car {

    String name;
    String color;

    //생성자
    public Car(String name, String color) {
        this.name = name;
        this.color = color;
    }
}

Car basicCar = new Car("그랜져", "black");
  • 생성자 오버로딩
    • 객체를 초기화할 때 다양한 생성자를 활용해서 객체를 생성
public class Car {

    String name;
    String color;

    
    public Car(String name) {
        this.name = name;
    }

    public Car(String name, String color) {
        this.name = name;
        this.color = color;
    }
}

Car basicCar1 = new Car("그랜져");
Car basicCar2 = new Car("그랜져", "black");

this 키워드 이해하기

  • (1) 객체가 객체 자신을 가르칠 때 사용함
  • “this.name”는 this라는 참조 변수로 필드를 사용하는 것과 동일
public Car(String name) {
    //필드의 name = //매개변수의 name
    this.name = name;
}
  • (2) 클래스의 다른 생성자를 호출할 때 사용
class Car {

    String company;
    String name;
    String color;

    public Car() {
        
    }

    public Car(String name, String color) {
        this("테슬라", name, color); //아래 생성자를 호출한다
    }

    public Car(String company, String name, String color) {
        this.company = company;
        this.name = name;
        this.color = color;
    }
}