TIL(2) - Java의 생성자와 메서드에 대해 알아보자!
CodeLatte 강의자료를 참조했다.
클래스 선언 후 객체를 프로그래밍에 사용하기 위해서는 생성자가 필요하다. 왜냐하면 클래스 선언 후 메로리에 생성된 객체의 인스턴스 변수는 초기화되지 않은 상태이기 때문이다. 생성자는 클래스 이름과 동일해야 하며 인스턴스 생성 후 한 번만 호출된다. 생성자를 사용하면 인스턴스를 좀 더 쉽게 초기화해 데이터를 저장하게 된다.
생성자 특징
1. 생성자 없이 인스턴스 변수에 데이터 저장하는 방법
Person person1 = new Person();
person.name = "사랑";
person.sex = "male";
person.age = 21;
Person person2 = new Person();
person.name = "믿음";
person.sex = "female";
person.age = 18;
2. 생성자를 사용하여 인스턴스 변수에 데이터 저장하는 방법
Person person1 = new Person("사랑", "male", 21");
Person person2 = new Person("믿음", "female", 18");
위의 두 방법 중 personN
이 100개까지 만들어진다고 가정했을 경우 좀 더 좋은 방법은 2번 방법일 것이다.
class Person {
String name;
String sex;
int age;
// 생성자와(매개변수) : 생성자 == 클래스명
Person(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
}
// 매개변수의 자료형과 입력값이 일치해야 한다.
Person person = new Person("이름", "성별", 1);
※ 만약 생성자를 명시적으로 선언해주지 않으면 Java에서 자동으로 Default 생성자를 생성한다.
this
키워드는 키워드가 속한 클래스(아래의 예시에서는 Person
)를 지칭한다. this
키워드로 클래스 범위 내 멤버 변수에 접근이 가능해진다.
단, 멤버 변수명과 생성자의 매개 변수명이 동일할 경우만 this
키워드로 멤버 변수에 접근 가능하다.
class Car {
// 멤버 변수
String engine;
int carNumber;
String handle;
// 생성자
Car(String engine, int carNumber, String handle) {
// this.변수명은 멤버 변수, 변수명은 매개 변수를 지칭
this.engine = engine;
this.carNumber = carNumber;
this.handle = handle;
}
}
메서드는 객체 지향 프로그래밍에서 객체와 관련된 함수이다. 객체의 행위를 메서드라 할 수 있으며, 행위는 무엇인가를 하는 방법을 의미하는 것으로 생각하면 이해가 쉬울 것 같다. 하나의 메서드는 하나의 기능만을 수행하도록 작성하는 것이 좋다.
메서드를 사용하는 이유는
메서드는 기본적으로 반환값 여부/매개변수 여부에 따라 4가지 메서드 형태로 존재한다.
※ 메서드 실행을 종료하기 위해 반환값이 없는 메서드에도 return
을 사용한다.
메서드느 클래스 내부에 선언되어야 한다.
person.java - 메서드 선언(getName
, getPergonInfo
)
class Person {
String name;
String sex;
int age;
Person(String name, String sex, int age) {
this.name = name;
this.age = age;
this.sex = sex;
}
// getName 메서드 선언(반환값이 없고 매개변수가 있는 메서드)
void getName(String name) {
System.out.printf("내 이름은 %s이다.\n", name);
}
// getPergonInfo 메서드 선언(반환값이 있고 매개변수가 없는 메서드)
String getPersonInfo() {
return String.format("name: %s, sex: %s, age: %d", name, sex, age);
}
}
Main.java - 메서드 호출
public class Main {
public static void main(String[] args) {
Person person = new Person("김하니", "female", 25);
// 메서드 호출
person.getName("홍길동");
System.out.println(person.getPersonInfo());
}
}
변수에도 인스턴스 변수와 정적 변수가 있는 것처럼 메서드에도 인스턴스 메서드와 정적 메서드가 존재한다.
인스턴스 생성 후 호출가능하다.
// 인스턴스 생성
Person person = new Person();
// 메서드 호출
person.getName("제니");
객체를 인스턴스화하지 않고 호출가능한 메서드로 프로그램 시작시 메서드 내용이 적재된다.
메서드 선언 - return값 앞에 static
제한자를 넣어주면 된다.
class Math {
static int sum(int A, int B) {
return A + B;
}
}
메서드 호출 - 클래스명.메서드명(Math.sum
)으로 호출한다.
int plus = Math.sum(3, 4);
System.out.println(plus);
// 7