프로그램을 객체들의 집합으로 보며 이러한 객체들이 프로그램의 중심
객체 = 속성 + 메소드
객체: 의미를 부여하고 분류하는 논리적인 단위
객체는 속성과 메소드로 구성되는데
속성: 객체의 정적인 특성을 표현
메소드: 객체의 동적인 특성인 행위를 표현
클래스: 여러 개의 객체를 생성하는 형판
캡슐화
외내부의 속성과 메소드를 지정 - 접근 제어자를 사용하여
=> 캡슐화와 정보 은닉이 가능
상속
기존 클래스에서 모든 속성과 메소드를 상속받고 더 필요한 속성과 메소드를 추가하여 새로운 클래스를 만드는 것
클래스 선언부
클래스 멤버
형식
class 클래스 이름 // 클래스 선언부
{
// 클래스 멤버
}
1단계: 객체참조형 변수 선언
클래스형의 객체가 저장되는 기억 장소의 주소를 가리키는 객체참조형 변수를 선언
2단계: 객체 생성
new 연산자를 이용하여 객체를 저장할 기억 공간을 확보
ex)
Student kim = new Student();
객체의 속성이나 메소드에 접근하려면 .(dot) 연산자를 이용하여 접근
ex)
kim.name = "kim"
kim.grade = 2;
[접근제어자] 데이터형 변수명;
클래스로부터 객체를 생성할 때 객체의 초기화 과정을 기술하는 특수한 메소드
특징
1. new 연산자와 함께 사용되며 객체 생성 시에 호출
2. 객체 생성 시에 객체의 멤버 변수(객체 변수)를 초기화하는 일을 주로 함
3. 생성자의 이름은 클래스 이름과 동일, 일반적으로 첫 문자는 대문자
4. return 이 없음
5. 생성자가 없는 클래스는 자바 가상 머신(JVM)이 자동으로 삽입하는 자동 생성자를 가짐
6. 사용자가 정의한 생성자가 있을 경우에는 기본 생성자는 자동으로 없어짐
형식
[접근 제어자] 생성자 이름(매개 변수1, 매개 변수2){
// 객체 초기화에 필요한 코드
}
생성자는 객체 생성 시 반드시 호출되어야 하는 메소드
클래스는 매개 변수의 개수, 타입, 순서를 달리하는 같은 이름의 생성자를 여러 개 정의할 수 있으며 이를 생성자 오버로딩(overloading)이라고 함
다양한 형태의 생성자를 통해 다양한 형태의 객체를 생성함으로 다형성 구현
클래스에 사용되는 this는 현재 생성되어 사용 중인 객체 자신의 의미
오버로딩에서 생성자 안에서 다른 생성자를 호출하는 경우
public Student(String name) {
this.name = name;
}
public Student(String name, int grade) {
//this.name = name;
this(name);
this.grade = grade;
}
메소드는 클래스가 가지는 동적인 특성인 행위를 정의
형식
[접근 제어자] 리턴타입 메소드이름(매개 변수1, 매개 변수2 ...)
{
// 메소드 내용
}
동적인 특성이 필요하다면 메소드로 구현하면 됨
멤버 변수 접근 권한을 private로 하고 public으로 지정한 메소드를 통해 멤버 변수에 접근하도록 하는 것이 바람직하다.
=> 객체지향 언어의 특징인 캡슐화 구현
클래스 메소드도 클래스 로딩할 때 생성되며 객체 변수가 아닌 클래스 변수만 사용
같은 클래스 안에 매개 변수의 개수, 타입, 순서를 달리하는 동일한 이름의 메소드가 여러 개 존재
상속(inheritance)는 기존에 있는 클래스의 멤버 변수나 메소드를 물려받아 새로운 클래스를 만드는 것
상속은 extends 키워드를 사용하고 단일 상속만을 지원
형식
[접근 제어자] class 클래스 이름 extends 상위 클래스 명{
// 멤버 변수나 메소드 정의
}
상속 관계에서 상위 클래스의 접근 제어자가 protected일 경우 하위 클래스에서 접근할 수 있지만 여전히 private일 경우 상속 관계에서도 접근이 불가능하다.
상속 과정에서 생성자는 상속되지 않고, 하위 클래스의 객체 생성 시 자동으로 상위 클래스의 인자 없는 생성자가 호출된다.
=> 상위 클래스의 인자 없는 생성자가 없으면 오류
상속 관계에 있는 클래스에서 상위 클래스의 멤버 변수나 생성자를 호출하기 위해서는 super 키워드와 super() 메소드 사용
형식
super.상위 클래스의 멤버 변수
super.상위 클래스의 메소드 이름()
당신의 시간이 헛되지 않는 글이 되겠습니다.
I'll write something that won't waste your time.