1. 메서드

메서드는 객체가 행할 수 있는 동작에 대한 코드를 담고 있다.

기본 구조

호출

인스턴스 뒤에 **접근연산자(.)**를 사용하여 메서드를 호출한다.

main 메서드

Static

2. 생성자

Constructor

생성자 또한 메서드 중 하나. 클래스명과 동일한 메서드 명을 가진 반환 값이 없는 메서드다. this 키워드를 통해 매개변수와 필드를 구분한다.

기본 생성자

생성자는 객체가 생성될 때 호출되는 메서드다. 생성자의 목적은 객체의 초기상태를 설정하는 것이다.

기본생성자는 클래스에서 명시적으로 정의한 생성자가 없으면 컴파일러가 자동으로 생성해주는 매개변수가 없는 생성자다. 하지만 다른 생성자가 정의되어 있으면 기본생성이 되지 않으니 의식적으로 명시해주는 것이 좋다.

public class Person {
    private String name;
    private int age;

    // 컴파일러가 생성해주는 기본 생성자의 구현부에는 아무 코드가 없다.
    public Person() { }

생성자는 클래스가 인스턴스화될 때 호출되는 특별한 메서드 → new Object() (더 공부해서 추가할 것)

오버 로딩

생성자는 오버로딩하여 동일하게 객체를 생성해주는 일을 하지만 매개변수가 다른 다양한 생성자 메서드를 작성할 수 있다. 만약 오버로딩이 가능하지 않았다면? 객체 생성 시, 다양한 초기화 옵션을 제공할 수 없었을 것.

그렇다면 Java는 동일한 이름의 메서드를 어떻게 구분할까? 메서드 시그니처(Signature)가 있기 때문에 가능하다. 메서드는 메서드명, 매개변수의 자료형, 개수로 메서드 시그니처를 구분한다.

public class Person {
    private String name;
    private int age;

    // 기본 생성자
    public Person() {
        this.name = "Unknown";
        this.age = 0;
    }

    // 이름만 초기화하는 생성자
    public Person(String name) {
        this.name = name;
        this.age = 0;
    }

    // 이름과 나이를 초기화하는 생성자
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

this()

또한, this() 키워드를 사용한다면 같은 클래스 내의 생성자를 호출하는 방식으로 코드를 재사용하여 코드중복을 없애고 유연한 클래스 설계가 가능하다.

public class Person {
    private String name;
    private int age;
    private String gender;

    // 기본 생성자
    public Person() {
        this("Unknown", 0, "Unknown");
    }

    // 이름만 초기화하는 생성자
    public Person(String name) {
        this(name, 0, "Unknown");
    }

    // 이름과 나이를 초기화하는 생성자
    public Person(String name, int age) {
        this(name, age, "Unknown");
    }

    // 이름, 나이, 성별을 초기화하는 생성자
    public Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

키워드 총정리

this this()
• 인스턴스 자신을 가리키는 참조 변수
• 인스턴스의 주소가 저장
• 멤버 필드임을 명시하는, 매개변수와의 구분을 위해 사용 • 같은클래스의 다른생성자를 호출할때사용
• 클래스 이름 대신 this 사용
• 반드시 첫 줄에서 호출
super super()
• 상위 클래스의 멤버를 참조하는 참조 변수
• 상위 클래스 멤버와 자신의(하위 클래스) 멤버를 구분 상위 클래스의 생성자를 호출하는 데 사용
• 반드시 첫 줄에서 호출

3. 1주차 테스트

6번. 상속과 오버라이딩

메서드 오버라이딩 시, super()를 사용하지 않는다면?

Untitled


다음과 같은 오류가 발생한다.

Untitled

상속관계에서 자식 생성자는 부모 생성자를 꼭 호출해줘야 한다. 그러므로 자식클래스의 메서드 구현부를 작성할 때, 부모클래스가 가지고 있는 속성은 super()를 써서 작성 해야한다.


7번. 이중for문