[TIL-Java] 상속과 캡슐화

이용준·2022년 11월 7일
0

TIL

목록 보기
2/21

1.상속

1-1.상속(extends)

  • 기존 클래스를 재활용해 새로운 클래스 작성하는 문법 요소.
    (상위 클래스 멤버(필드,메서드,이너클래스)를 하위 클래스와 공유하는 것)
  • 하위 클래스는 상위 클래스가 가진 모든 멤버 상속.
  • "~ 클래스로부터 확장되었다." 개념
  • 코드 중복을 제거하고 다형적 표현이 가능해진다.
  • 자바는 단일 상속만 허용
    (그러나 인터페이스 통해 다중 상속과 유사한 효과낼 수 있음)

1-2.포함관계

  • 포함, 클래스의 멤버로 다른 클래스 타입의 참조변수 선언하는 것.

  • 상속관계 기준점 : ~(은)는 ~(을)를 가지고 있다(HAS-A)관계인지 확인

    public class Student {
       int id;
       String name;
       Grade grade;
    
       public Student(int id, String name, Grade grade) {
           this.id = id;
           this.name = name;
           this.grade = grade;
       }
    
       void studentInfo() {
           System.out.println(id + " " + name);
           System.out.println(grade.years + " " + grade.room);
       }
    
       public static void main(String[] args) {
           Grade grade1 = new Grade("3학년", "1반");
           Grade grade2 = new Grade("2학년", "3반");
    
           test t1 = new test(1, "김진우", grade1);
           test t2 = new test(2, "강찬석", grade2);
    
           t1.studentInfo();
           t2.studentInfo();
       }
    }
    class Grade{
           String years, room;
           public Grade(String years, String room){
               this.years=years;
               this.room=room;
           }
       }

    위 방식은 Grade 클래스로 인스턴스 변수(years, room)를 묶어 Student 클래스 안에 참조 변수를 선언하는 방법으로 코드 중복 제거 및 포함관계로 재사용한다.

1-3.메서드 오버라이딩

덮어쓰기

  • 상위 클래스에서 상속받은 메서드와 동일한 이름의 메서드 재정의
  • 메서드 오버라이딩 조건 3가지
    1) 메서드 선언부(메서드명, 매개변수,반환타입)가 상위클래스 메서드와 완전히 일치
    2) 접근제어자 범위가 상위클래스보다 같거나 넓어야 한다.
    3) 예외는 상위클래스의 메서드보다 많이 선언할 수 없다.

1-4.super 키워드와 super()

  • this는 객체 자신, this()메서드는 자신의 생성자 호출.
  • super키워드는 상위클래스 객체, super()는 상위클래스 생성자 호출 의미
  • 상위클래스와 상속 관계를 전제로 한다.
  • super
    • super 키워드를 통해 부모 객체의 멤버값 참조 가능
    • this와 유사
  • super()
    • 생성자 안에서만 사용 가능
    • 반드시 첫줄에 와야 함.

1-5.Object 클래스

  • 최상위에 위치한다.

  • 자바의 모든 틀래스는 object 클래스로부터 확장

  • 컴파일 과정에서 아무 상속받지 않는 클래스에 자동적으로 extends object 추가해 object 클래스 상속받도록 함

  • 자바 상속 계층도 최상위에 위치해 object 클래스의 멤버들을 자동 상속받아 사용 가능.

    object 클래스의 대표적 메소드

    메소드명반환타입기능
    toString()String객체 정보를 문자열로 출력
    equals(Object obj)boolean등가 연산(==)과 동일하게 스택 메모리값 비교
    hashCode()int객체의 위치 정보 반환
    Hashtable or HashMap에서 동일객체 여부 판단
    wait()void현재 쓰레드 일시정지
    notify()void일시정지 중인 쓰레드 재동작

2.캡슐화

2-1.캡슐화

  • 특정 객체내 관련된 속성과 기능을 하나의 캡슐화해 데이터를 외부로부터 보호하는 것.
  • 목적
    1) 데이터 보호
    2) 내부 데이터의 불필요한 외부 노출 방지
    (정보 은닉)

2-2.패키지

  • 특정 목적을 공유하는 클래스와 인터페이스의 묶음
  • 클래스들을 그룹 단위로 묶어 효과적 관리가 목적
  • 패키지는 하나의 디렉토리
  • import문 통해 다른 패키지 내 클래스 불러옴

2-3.접근제어자

  • 접근 범위

    • public > protected > default > private
  • 접근제어자는 대사에 단 한번만 사용 가능

  • 클래스 외부로 불필요한 데이터 노출 방지

  • 외부로부터 데이터의 임의 변경 방지

    접근 제한 범위

    접근제어자접근 제한 범위
    private동일 클래스
    default동일 패키지
    protected동일 패키지 + 다른 패키지의 하위 클래스
    public접근 제한 없음

2-4. getter와 setter메소드

  • private 접근제어자가 포함된 객체 내 변숫값 추가 및 수정에 사용
  • 데이터를 효과적으로 보호하며 의도하는 값으로 변경 가능
    (보다 효과적인 캡슐화 달성)

1)setter 메소드

  • 데이터 값 변경
  • 메서드명에 set- 붙임

2)getter 메소드

  • 설정한 변숫값 읽어오는데 사용
  • 메서드명에 get- 붙임
profile
뚝딱뚝딱

0개의 댓글