[JAVA] 클래스

뽕칠이·2024년 1월 18일

클래스(class)

객체를 생성하기 위한 설계도와 같은 의미로 해석된다.
클래스는 객체의 상태를 나타내는 필드(변수), 객체의 행동을 나타내는 메소드로 구성된다.
ex) 클래스 = 붕어빵 틀 / 객체 = 붕어빵

인스턴스(instance)

클래스를 통해 생성된 객체를 인스턴스라고 한다.

클래스 정의 및 객체 생성 방법, 상속

부모 클래스에 속한 자식 클래스가 자식 클래스는 부모 클래스의 멤버를 선택해서 사용할 수 있다.
클래스를 재사용할 수 있기 때문에 효율적이다.

-> 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)

추상 메서드를 갖는 클래스를 의미한다. 추상 메서드란 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메서드를 의미한다.
추상 메서드는 선언부만 존재하며, 구현부는 자식 클래스를 통해 작성된다.

// 추상 클래스
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();
    }
}

접근 지시자(Access Identifier)

외부에서 접근할 수 있는 범위를 지정하는 것을 이미한다.

접근 지시자를 사용하는 이유

  • 객체 생성을 막기 위해 생성자를 호출하지 못하게 한다.
  • 객체의 특정 데이터를 보호하기 위해 해당 필드(변수)에 접근하지 못하게 한다.
  • 특정 메소드를 호출할 수 없게 한다.
접근 지시자같은 클래스같은 패키지자식 클래스Main
public가능가능가능가능
protected가능가능가능불가능
default가능가능불가능불가능
private가능불가능불가능불가능

결론
1. 외부로부터의 접근을 제한하여 데이터를 보호한다.(은닉성)
2. 내부의 내용을 감춰서 외부에서는 구조를 몰라도 사용법만 알아도 된다.(캡슐화)

0개의 댓글