Java/Java

[Java] 클래스와 메서드(1)

simonpark817 2024. 1. 29. 12:39

[클래스와 메서드]

  • 모든 객체는 우리가 흔히 알고 있는 자료형 int, double를 통해서만 생성되지 않는다.
  • 클래스라는 설계도를 만들어 객체 타입을 사용자가 직접 정의하여 생성할 수 있다.
public class Main {
    public static void main(String[] args) {
//      객체 생성
        Person a = new Person();

        a.age = 20;
        a.isMarried = false;
        a.name = "철수";
        a.introduce();

        a.age = 21;
        a.name = "영수";
        a.introduce();
    }
}
class Person {
    int age;
    boolean isMarried;
    String name;
    
    void introduce() {
        System.out.println("== 자기소개 ==");

        System.out.printf("이름 : %s\n", this.name);
        System.out.printf("나이 : %d\n", this.age);
        System.out.printf("결혼여부 : %b\n", this.isMarried);
    }
}
  • 다음 예시에서 main 함수를 봤을 때 Person이라는 객체를 생성하여 a라는 객체 변수를 생성하였다.
  • Person은 간단하게 말해서 사람의 정보를 나타내는 타입으로서 하나의 설명서, 설계도를 의미한다.
  • Person이라는 클래스를 main 함수 밖에 만들어주고, 해당 설계서에 필요한 정보를 변수를 통해 생성해준다.
  • 객체 안에 넣을 수 있는 2가지 특징이 있는데 바로 명사적 특징과 동사적 특징이다.
  • Person은 나이(age), 결혼여부(isMarrided), 이름(name)을 포함하고 있다.
  • 위는 모두 명사적 특징으로서 단 하나의 값을 저장할 수 있는 역할을 한다.
  • 설계도에 변수 생성을 다 했다면 main 함수에서 해당 객체를 가르키는 변수를 통해 값을 연결시켜줄 수 있다.
  • 나이에 값을 넣고 싶다면 a.age, 결혼여부에 값을 넣고 싶다면 a.isMarried, 이름에 값을 넣고 싶다면 a.name과 같이 객체 안의 속성을 연결시켜서 값을 입력한다.
  • 해당 값들을 main 함수에서 출력문을 통해 출력도 가능하지만, 클래스 설계도에서 자기소개를 하는 기능을 하나 만들어 준다면 편하다.
  • 여기서 자기소개(introduce)를 하는 기능을 우리는 흔히 함수라고 알고있지만 Java에서는 메서드라고 부른다.
  • 메서드는 동사적 특징으로서 ~한다와 같이 실행할 수 있는 역할을 한다.
  • introduce() 메서드 안에 출력문에서 this를 통해서 클래스에서 정의한 변수들을 가져올 수 있다.
  • introduce() 메서드에서 선언한 age는 해당 메서드 안에서만 유효하기 때문에 지역변수라 부르고 출력문에서 this로 연결된 변수와는 이름은 같지만 실제로는 서로 다른 변수다.
  • 그리고 main 함수에서 a.introduce() 를 호출시키면 해당 메서드가 실행되면 출력문이 출력된다.

 

 

[문제]

  • 다음은 자동차를 소개하는 설계도를 작성하여 출력하는 클래스와 메서드를 구현해보자.
public class Main {
    public static void main(String[] args) {
        Car c1 = new Car();
        Car c2 = new Car();     // Car 라는 객체를 설계도를 기반으로 만들고, 그 참조(주소)값을 c2에 연결해라.
        Car c3 = new Car();

        c1.max_speed = 150;
        c2.max_speed = 200;
        c3.max_speed = 300;

        c1.name = "k5";
        c2.name = "소나타";
        c3.name = "k9";

//      c3가 가리키는 자동차의 주소가 c4에도 전달된다.
        Car c4 = c3;
        c4.name = "아반떼";

        for(int i = 0; i < 3; i++) {
            c1.run();
        }

        c1.run();
        c2.run();
        c3.run();

    }
}

// 자동차 설계도 작성
class Car {
    int max_speed;
    String name;

    void run() {
        System.out.println(this.name + " 자동차가 달립니다.");
    }
}
  • 먼저 Car라는 클래스를 생성하여 해당 클래스 안에 최대 속력과 차 이름을 담을 수 있는 지역변수를 생성한다.
  • main 함수에서는 Car라는 객체를 클래스 설계도를 기반으로 생성해준다.
  • 객체는 총 3개(c1, c2, c3)를 만들어줬고 각 객체의 정보를 main함수에서 담아준다.
  • 모든 자동차 객체들이 정상적으로 동작한다는 것을 보여주기 위해서 Car 클래스에 run() 라는 메서드를 만들어 주고 해당 메서드 안에 출력문을 포함하였다.
  • 그리고 main 함수에서 c1.run(), c2.run(), c3.run()를 실행시키면 해당 출력문이 출력된다.
  • 여기서 c4 변수는 Car 타입으로 생성된 변수지만 객체를 따로 생성하지 않고 c3의 Car 객체와 연결시켜줬기 떄문에 c4.name을 출력해보면 c3.name과 같은 k9이 출력된다.

 

반응형