클래스와 객체 선언 및 접근
클래스는 객체를 생성하기 위해 정의된 틀로 클래스 내에는 변수와 메소드가 존재한다. 메소드는 다른 언어에서는 함수라 불린다.
객체는 클래스를 통해 생성된 것으로 클래스가 선언한 변수와 메소드를 사용할 수 있다. 이를 인스턴스(instance)라고도 부르고, 때문에 객체를 만드는 과정을 인스턴스화(instantiation)이라 부르며,따라서 객체가 가지고 있는 변수를 인스턴스 변수, 메소드를 인스턴스 메소드라 부르기도 한다. 하나의 클래스를 통해 여러 객체가 생성 가능하며, 이때 객체들은 각각의 인스턴스 변수를 가진다. 즉 클래스가 설계도라면 객체는 설계도로 만들어진 것이다.
클래스는 class
키워드를 통해 만들 수 있다. 예를 들어 아래와 같이 사람이라는 클래스를 만들어보자.
public class Person {
String name;
int age;
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void talk() {
System.out.println("Blah blah~");
}
}
변수로 이름과 나이를 만들어주었고, 메소드로 이름을 반환하는 메소드, 나이를 반환하는 메소드, 쓸데없는 말을 하는 메소드를 만들었다.
이를 이용하여 다음과 같이 객체를 만들고 활용할 수 있다.
public static void main(String[] args) {
Person p = new Person();
p.name = "John";
p.age = 30;
p.talk();
System.out.println(p.getName());
System.out.println(p.getAge());
}
이를 통해 확인할 수 있듯이 객체는 기본적으로 new
키워드를 통해 만들어진다. 또한 객체의 인스턴스 변수와 메소드로의 접근은 .
을 통해 이뤄진다.
생성자 (Constructor)
- 생성자
생성자란 객체를 생성할 때 호출되는 인스턴스 메소드이다. 일반적으로 생성자를 통해 인스턴스 변수를 초기화해준다. 생성자는 명시적으로 생성해줄 수도 있지만, 명시적으로 선언된 생성자가 없다면 디폴트 생성자(default constructor)가 자동으로 생성된다. 이때 디폴트 생성자는 객체를 생성하기만 하며, 매개변수가 없다.
위 예시로 객체 선언을 보인 코드에서 new
키워드 뒤에 붙은 것은 생성자를 호출하는 것이다. 따라서 아래와 같이 생성자를 만든다고 해보자.
public Person(String name, int age) {
this.name = name;
this.age = age;
}
그렇다면 새로운 객체를 만들 때는 아래와 같이 만들어야 한다.
Person p = new Person("John", 3);
만약 처음과 같이 매개변수가 없는 생성자, 즉 new Person(); 으로 객체를 만든다면 디폴트 생성자가 만들어지지 않았으므로 매개변수 없는 생성자가 없고, 따라서 오류가 발생한다. 존재하는 생성자 중 적절한 생성자를 선택하여 객체를 생성해야 하는 것이다.
- 생성자 중복
위에서 존재하는 생성자 중이라 말한 이유는 생성자는 여러개가 존재할 수 있기 때문이다. 예를 들어 위와 같이 매개변수로 name, age 가 있는 생성자를 만들었는데, 디폴트 생성자와 같이 매개변수가 없는 생성자도 필요하다고 생각해보자. 이때 아래와 같이 생성자를 추가로 만들어줄 수 있다.
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person() {
name = "hong-gil-dong";
age = 0;
}
그렇다면 객체를 만들면서 new Person(); 으로 호출하면 매개변수가 없는 생성자가 호출되어 정상적으로 객체가 생성된다.
예를 들어 아래와 같이 객체를 호출한다 해보자.
Person p1 = new Person("John", 3);
Person p2 = new Person();
이렇게 생성된 객체 p1 은 이름으로 John을, 나이로 3을 가지지만, p2는 이름으로 홍길동을, 나이로 0을 가진다.
this
위 코드들을 통해 간접적으로 확인할 수 있지만, 자기 자신을 가리킬 때는 this
키워드를 사용한다.
'Language > Java' 카테고리의 다른 글
[Java] 클래스 상속(inheritance) (0) | 2024.11.12 |
---|---|
[Java] 접근 지정자(access modifier) (0) | 2024.11.11 |
[Java] Scanner 클래스를 이용한 입력 (0) | 2024.10.29 |
[Java] 연산자 우선순위 (0) | 2024.09.10 |
[Java] 기본 자료형 크기와 범위 (0) | 2024.09.10 |