객체를 생성하기 위한 설계도와 같은 의미로 해석된다.
클래스는 객체의 상태를 나타내는 필드(변수), 객체의 행동을 나타내는 메소드로 구성된다.
ex) 클래스 = 붕어빵 틀 / 객체 = 붕어빵
클래스를 통해 생성된 객체를 인스턴스라고 한다.
부모 클래스에 속한 자식 클래스가 자식 클래스는 부모 클래스의 멤버를 선택해서 사용할 수 있다.
클래스를 재사용할 수 있기 때문에 효율적이다.
-> private으로 선언된 멤버는 자식이 물려받을 수 없다.
// 클래스 선언
class Person {
String name;
int age;
// 메소드 선언
public void walking() {
System.out.println(this.name + "이 걷고 있습니다.");
}
// 기본 생성자
Person() {
}
// 매개변수가 있는 생성자
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
class Student extends Person{
String Major;
int grade;
Student(String name, int age, String Major, int grade){
// 부모 클래스의 name과 age 변수를 super 키워드를 통해 가져옴
super.name = name;
super.age = age;
this.Major = Major;
this.grade = grade;
}
// 메소드 오버라이딩
public void walking(){
System.out.println("학생이 학원으로 걸어가고 있습니다.");
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person();
p1.name = "bbong";
p1.age = 20;
Person p2 = new Person("chill", 21);
Student s1 = new Student("bin", 22, "컴퓨터공학과", 3);
System.out.println(p1.name + " " + p1.age);
p2.walking();
System.out.println(s1.name + "은 " + s1.Major + " " + s1.grade + "학년이고, 나이는 " + s1.age + "입니다.");
s1.walking();
}
}
추상 메서드를 갖는 클래스를 의미한다. 추상 메서드란 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메서드를 의미한다.
추상 메서드는 선언부만 존재하며, 구현부는 자식 클래스를 통해 작성된다.
// 추상 클래스
abstract class Person{
// 추상 메서드
abstract void talking();
}
class Student extends Person{
// 추상 메서드를 자식 클래스를 통해 오버라이딩
void talking(){
System.out.println("학생이 말하고 있습니다.");
}
}
public class Main {
public static void main(String[] args) {
Student s1 = new Student();
s1.talking();
}
}
외부에서 접근할 수 있는 범위를 지정하는 것을 이미한다.
접근 지시자를 사용하는 이유
| 접근 지시자 | 같은 클래스 | 같은 패키지 | 자식 클래스 | Main |
|---|---|---|---|---|
| public | 가능 | 가능 | 가능 | 가능 |
| protected | 가능 | 가능 | 가능 | 불가능 |
| default | 가능 | 가능 | 불가능 | 불가능 |
| private | 가능 | 불가능 | 불가능 | 불가능 |
결론
1. 외부로부터의 접근을 제한하여 데이터를 보호한다.(은닉성)
2. 내부의 내용을 감춰서 외부에서는 구조를 몰라도 사용법만 알아도 된다.(캡슐화)