BACK END/JAVA

상속 , 오버라이딩, 포함, 접근제어자, 추상클래스

라미보 2022. 6. 6. 03:55

 

 

 

 

상속(Inheritance)이란?

 

-기존 클래스를 재사용하여 새로운 클래스를 작성하는 것이다.

-코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다.

-생성자는 상속되지 않고 단지 자식에 의해서 자동으로 호출

-하위 클래스는 상위 클래스의 모든 권한을 갖는다.

-상속 형식

  class 자손클래스  extends 조상클래스{

         멤버 변수와 멤버 메서드 선언과 정의

     }

 

 

● 상속관계

-기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것

-자손은 조상의 모든 멤버를 상속받는다.(생성자, 초기화 블록 제외)

-공통부분은 조상에서 관리하고 개별 부분은 자손에서 관리한다.

-조상의 변경은 자손에 영향을 미치지만, 자손의 변경은 조상에 아무런 영향을 미치지 않는다.

-여러 개의 부모 클래스 상속할 수 없음

-부모 클래스에서 private 접근 제한 갖는 필드와 메서드는 상속에서 제외

-부모와 자식 클래스가 다른 패키지에 존재할 경우 default 접근 제한된 필드와 메서드 역시 제외

 

 

 

 

● super 키워드

 

 

super.

-super는 자식 클래스가 부모 클래스로부터 상속받은 멤버를 참조할 때 사용하는 참조 변수이다.

-멤버 변수와 지역변수의 이름이 같을 때 this를 사용하듯이

 부모 클래스와 자식 클래스 멤버의 이름이 같을 경우 super를 사용한다.

-부모의 변수, 메서드에 접근할 때 사용한다.

-super( ) 괄호 안에 변수를 넣어주면 부모 생성자에서 같은 생성자로 가서 초기화 사용한다.

 괄호 안에 가져갈 게 없으면 기본 생성자로 가서 적용된다.
-어떤 종류이던 super는 한 번만 사용 가능.

 

super()

-super( ) 안에 변수를 넣어주면 부모 생성자에서 같은 생성자로 가서 초기화
-부모 생성자를 호출하는 데 사용
-안 써도 기본으로 들어간다(존재)
-생성자 첫 줄에만 존재한다.

 

 

 

 

 

 

 


 

 

●메서드 오버라이딩

 

오버라이딩(overriding)

-조상 클래스로부터 상속받은 메서드를 재정의 하는 것.

-하위 클래스에서 다시 만들면 상위 클래스의 똑같은 이름의 메서드는 무시된다.

 

조건

-상속받는 클래스와 선언부가 같아야 한다.(메서드 이름, 매개변수 타입, 매개변수 개수, 리턴 타입)

-접근제어자를 좁은 범위로 변경할 수 없다.

 조상의 메서드가 protecte이면, 범위가 같거나 넓은 progected나 public으로만 변경할 수 있다.

-조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.

-인스턴스 메서드를  static메서드로 또는 그 반대로 변경할 수 없다.

 

 

 

▪오버로딩과 오버라이딩 (차이점 알아두기🧐)

- 오버로딩(overoading) :  기존에 없는 새로운 메서드를 정의하는 것

- 오버라이딩(overriding) : 부모 클래스로부터 상속받은 메서드의 내용을 변경하는 것

 

 

 

 

 

 

 

 


 

 

● 포함

 

-클래스를 재사용하는 상속 이외의 또 다른 방법

-클래스의 멤버 변수로 다른 클래스를 선언한다.

 

 

 

 

 

 

 

 

 

 

 


 

 

● 추상 클래스

-'미완성 설계도'이므로 미완성 메서드를 포함하고 있다. 

-인스턴스 생성 불가

-추상 클래스를 상속받아서 완전한 클래스를 만든 후에 완성된 설계도(구상 클래스)가 되어야 객체를 생성할 수 있다.

-새로운 클래스를 작성하는데 바탕이 되는 조상 클래스로서 중요한 의미를 갖는다.

-'abstract'를 클래스 이름 앞에 붙여주면 추상 클래스라는 것을 알 수 있다.-

-공통된 부분들만 구현하고 , 공통되지 않은 부분들은 다른 클래스로 상속되어 미완성된 부분들을 재정의하여 완성시키는   클래스

 

 

● 추상 메서드

-abstract는 '미완성'의 의미 , 메서드 선언부에 'abstract'를

-메서드의 선언 부만 작성하고 실제 수행 내용은 구현하지 않은 추상 메서드를 선언하는 데 사용한다.

-메서드의 내용은 상속받는 클래스에 따라 달라질 수 있기 때문에

제어자 대상 의미
abstract 클래스 클래스 내에 추상메서드가 선언되어 있음
메서드 선언부만 작성하고 구현부는 작성하지 않은 추상메서드임

 

 

 

 

 

 

 


 

 

 

● 제어자 (mdifier)

-클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다.

-접근 제어자는 네 가지 중에서 하나만 선택해서 사용할 수 있다.

 

접근 제어자 public, protected, defauult, private
그 외 static , final, abstract, native, transient, synchronized, colatile, strictfp

 

 

 

▪ final 

-변경될 수 없는 의미를 갖고 있다.

-사용될 수 있는 곳은 클래스, 메서드, 멤버 변수, 지역변수

제어자 대상 의미
final 클래스 변경될 수 없는 클래스, 확장될 수 없는 클래스가 된다.(ex, String, Math)
다른 클래스의 조상이 될 수 없다.
메서드 오버라이딩을 통해 재정의 될 수 없다.
멤버변수 변수 앞에 final을 붙이면, 값을 변경할 수 없는 상수가 된다.
지역변수

 

 

▪ static

-'클래스의' 또는 '공통적인'의 의미

-사용될 수 있는 곳은 멤버 변수, 메서드, 초기화 블록

 

제어자 대상 의미
staic 멤버변수 모든 인스턴스에 공통적으로 사용되는 클래스 변수가 된다.
클래스 변수는 인스턴스를 생성하지 않고도 사용 가능하다.
클래스가 메모리에 로드될 때 생성
메서드 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 된다.
static 메서드 내에서는 인스턴스 멤버들을 직접 사용할 수 없다.

 

 

 

 

▪ 접근 제어자(access modifier)

-접근제어자는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할

-접근제어자는 생략 가능하며 생략했을 때는 자동으로 default 임을 뜻하게 된다.

-접근제어자가 사용될 수 있는 곳 : 클래스, 멤버 변수, 메서드, 생성자

 

 

1.private : 같은 클래스 내에서만 접근이 가능

2. default : 같은 패키지 내에서만 접근이 가능

3. protected : 같은 패키지 내에서, 다른 패키지의 자손 클래스에서 접근이 가능하다.

4. public : 접근 제한이 전혀 없다.

 

 

-사용하는 이유(객체지향 개념의 캡슐화에 해당된다.)

외부로부터 데이터를 보호하기 위해서

외부에 불필요한, 내부적으로만 사용되는, 부분을 감추기 위해서

 

 

 

-접근 범위가 넓은 쪽에서 좁은 쪽의 순으로 나열

public (접근 제한 없음)  >  protected (같은 패키지+자손)  >  default(같은 패키지)  >  private(같은 클래스)

 

제어자 같은 클래스 같은 패키지  자손 클래스 전체
public
protected  
default    
private      

 

 

 

 

 

 

 

 

 

 

 

객체지향 프로그래밍에 해당되는 부분을 배워보았다.

이제야 정말 자바에 대해 배우는구나 실감할 수 있는 단계였다.

아직은 추상 메서드와 추상 클래스가 어느 부분에서 사용되는 건지 체감을 할 수는 없지만, 이에 대한 기능을 이해해보려고 노력해봤습니다.

오버로딩과 오버라이딩 명칭은 비슷하지만 역할은 완전히 다름에서 쉽게 헷갈려 할 수 있음을 깨달았습니다.

갈수록 개념들도 어려워지고 생소해진다. 접근제어자, 상속, 추상메서드 와 같은 중요한 단원들이 나오면서 조금이라도 놓치면 다음 단원을 배울 때 이해하기 어려워질거 같은 느낌을 받으며..여러번 반복해야 함을 느꼈다.

미숙하지만 개념들을 이해하고, 제대로 활용할 수 있도록 연습을 더 많이 해보아야 할 것 같습니다.