객체지향 프로그래밍(7강 - 11강)

생성자, 생성자 오버로딩

생성자(Constructor)
  • 객체를 생성할 때 new 키워드와 함께 호출
  • 인스턴스를초기화 하는 코드가 구현됨(주로 멤버 변수 초기화)
  • 변환 값이 없고 상속되지 않음
  • 생성자는 클래스 이름과 동일
기본 생성자(Default constructor)
  • 하나의 클래스에는 반드시 하나 이상의 생성자가 존재해야 함
  • 생성자를 구현하지 않으면 컴파일러가 생성자 코드를 넣어줌(기본 생성자)
  • 기본 생성자는 매개 변수와 구현부가 없음
  • 클래스에 다른 생성자가 있는 경우 기본 생성자는 제공되지 않음
생성자 오버로딩(Constructor overloading)
  • 생성자를 두 개 이상 구현하는 경우
  • 매개변수의 타입과 개수를 다르게 구현
  • 사용하는 코드에서 여러 생성자 중 선택하여 사용
  • private 변수도 생성자를 이용하여 초기화 가능
public class Student {
    int studentID;
    String name;
    String address;
    
    // 기본 생성자
    public Student() {
        
    }
    
    public Student(int id, String name) {
        studentID = id;
        name = name;
    }
}

참조 자료형(Reference data type)

참조 자료형
  • 변수의 자료형
    • 기본 자료형: int ,long ,float, double 등
    • 참조 자료형: String, Date 등
  • 클래스형으로 변수 선언
    • String name;
  • 기본 자료형은 사용하는 메모리가 정해져 있짐나 참조 자료형은 클래스에 따라 다름
// Subject.java

package test;

public class Subject {
    String subjectName;
    String subjectScore;
}
// Student.java

package test;

public class Student {
    String stdeuntName;
    int studentID;
    
    Subject eng;
    Subject math;
    
    public Student(String name, int id) {
        stdeuntName = name;
        studentID = id;
        eng = new Subject();
        math = new Subject();
    }
    
}

정보 은닉

접근 제어자(Access modifier)
  • 변수, 메서드, 생성자에 대한 접근 권한 지정
  • public: 모든 클래스에서 접근 가능
  • private: 외부 클래스에서 접근 불가
  • protected: 상위 클래스의 private 메서드/변수를 하위 클래스에 public하게 하고 싶을 때 사용
  • 아무것도 안 쓰는 경우(기본 접근 제어자): 같은 패키지 내에서만 접근 가능
정보 은닉(Information hiding)
  • 외부에서 클래스 내부의 정보에 접근하지 못하도록 private 사용
  • private 변수를 외부에서 접근하게 하려면 public 메서드 제공하여 클래스 내부 데이터를 잘못 사용하는 오류 방지

this

this의 역할
  • 자신의 메모리를 가리킴

    • stack에 쌓인 this가 heap에 있는 메모리를 가리키게 됨
  • 생성자에서 다른 생성자 호출

    ...
      
    public Person() {
        this("No name", 1);
    }
      
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
  • 인스턴스 자신의 주소 반환