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이 출력된다.
반응형