성장 일기/쌍용교육센터 / / 2022. 12. 22. 09:51

1222/Override, Interface

쌍용교육센터에서 공부한 내용을 정리하며 기록하는 글이고 주관적인 생각이 들어갈 수 있습니다.
잘못된 내용이나 피드백 및 생각 공유는 언제든 환영입니다.
댓글로 남겨주시면 확인 후 수정하겠습니다.
내용에 대한 소스 코드는 https://github.com/2jaehoon/ssangyonng.git 에 올려두었습니다.

 

Override

- 부모클래스에서 제공하는 기능이 자식 클래스의 상황과 맞지 않는다면

  부모클래스 메소드와 동일한 메소드를 작성하고 다른 기능을 사용하는 것( 다형성 )

      다형성에서는 메소드 다형성과 객체 다형성으로 나누어진다.
      메소드 다형성 : Overload, Override

      객체 다형성 : 상속(extends) , 구현(implements)

- 상속 관계에서 주로 사용된다.

- 접근지정자는 달라도 되고, 반환형, method명, 매개변수는 같아야 한다.

- 접근지정자는 광의의 접근지정자로 변환 가능하다.

- method의 접근 지정자가 final이면 Override가 되지 않는다.

- Override는 annotation을 사용할 수 있다. ( @Override )

      컴파일 시 Override의 적합성 여부를 체크

- Override된 method는 최우선적으로 호출된다.

 

annotation

- JDK1.5에서부터 지원 되는 기능

- 컴파일러에게 컴파일시 명령을 내리는 주석

- method, 변수, interface 위에 정의

 

* @Overide

- method 위 정의

- Overrode가 제대로 되었는지 체크

@Override
public void test(){

}

 

* @Deprecated

- method 위 정의

- 비추천 method인지 체크해준다.

@Deprecated
public void test(){

}

 

* @SuppressWarnings

- 메소드 위 정의,  지역 변수 위 정의

- 경고를 없앨 때 사용한다.

// unused : 변수를 사용이 안되도
// rawtypes : Generic이 사용되지 않더라도
// deprecation : 비추천 메소드가 사용되더라도
@SuppressWarnings({"unused", "rawtypes", "deprecation"})//메소드 안의 경고를 모두 보여주지 않는다.
public void test(){
@SuppressWarnings("unused") //i 변수가 사용되지 않더라도 경고를 보여주지 않는다.
int i; //변수 만들고 안 쓰면 경고
}

 

추상클래스 (Abstract class)

- 상속의 기능을 사용하기 위해서 만드는 부모 클래스

- 구현의 강제성을 가진 추상 method를 가진다.

- 클래스 안에 변수랑 메소드랑 추상 메소드가 들어간다.

- 추상클래스는 직접 객체화를 할 수 없다. ( 자식 클래스를 통해서만 객체화가 된다. ) 

- 이클립스에서 단축키 Alt+Shift+s를 사용하면 쉽게 만들 수 있다.

// 문법
접근 지정자 abstract class 클래스명 [extends 부모클래스] [implements 구현 인터페이스]

 

* abstract method

- 구현의 강제성을 가진 method ( 자식 클래스가 반드시 Override 해야 한다.)

- method의 body( {  } )가 없다. ( 일을 직접 할 수 없다. )

- 자식클래스가 반드시 구현해야할 일의 목록을 만드는 것이다.

- 추상 메소드가 호출되면 자식 클래스가 구현한 메소드가 최우선적으로 호출된다.

//문법
접근지정자 abstract 반환명 method명(매개변수들);

 

interface

- 다중 상속의 장점을 사용하기 위해 사용한다.

- 약결합을 구현하여, 객체간의 유연성을 높이기 위해 사용한다. ( 자바의 꽃 )

- 구현 클래스에서 구현해야 할 일의 목록만 정의

- default method에서는 override의 강제성이 없다. ( JDK1.8부터 추가된 기능 )

//문법
접근지정자 interface 인터페이스명 [ extends 상속받을 인터페이스 ]{
}
// 접근 지정자는 두 가지 public과 package(동일 패키지에서만 접근 가능)
//interface는 extends로 여러 개의 인터페이스를 상속 가능

- 모든 인터페이스의 추상 method는 구현 클래스에서 반드시 Override해야 한다.

- diagram으로 그릴 때에는 머리가 빈 화살표를 사용한다.

 

class diagram에서 interface

- 클래스에서 implements 키워드로 인터페이스를 구현한다.

class 클래스명 [implements 인터페이스명]

- Interface의 abstract method는 두 가지 형식으로 작성 가능

  abstract 사용

접근 지정자 abstract 반환형 method명(매개변수, ...);

  abstract 사용하지 않은 경우

접근 지정자 반환형 method명(매개변수, ...);

- 인터페이스는 객체화할 수 없고, 구현한 객체의 주소는 저장할 수 있다.

// 인터페이스명 객체명 = new 인터페이스명(); 은 객체화 불가
인터페이스명 객체명 = new 구현클래스의생성자();

 

is a 관계 : 상속을 받으면 다른 클래스의 기능을 내 클래스의 정의한 것 처럼 사용 가능 ( 기능 변경 o )

has a 관계 : 상속을 받지 않으면 다른 클래스의 기능을 객체화 후 객체명으로 사용 ( 기능 변경 x )

 

is a관계의 객체화

- 객체 다형성을 사용할 때( 같은 이름의 객체를 다르게 사용하는 것 )

- 자바에서 부모클래스는 자식 클래스를 모른다.

- 자바에서 자식클래스는 부모클래스를 안다.

 

// 이렇게 객체화를 하면 자식의 기능과 부모의 기능 모드 사용 가능
HongGilDong hgd = new HongGilDong();

// 자식은 부모이다. 자식클래스에서는 부모클래스의 정보를 가지고 있다.
// 이렇게 객체화를 하면 부모의 기능만 사용가능
// 단, 오버라이드된 메소드가 있다면 자식의 메소드가 호출됨.
// 자식 클래스를 객체화해 부모 클래스에 할당하는 것은 가능하다.
// 클라크의 주소에서 펄슨의 부모의 정보를 받아서 사용하는 것
Person p = new HongGilDong(); 
Person p = new Clark();

// 그 반대는 자식클래스의 정보가 없기 때문에 
// 부모의 주소에서 자식들의 정보를 받지 못한다.
// 객체명은 객체의 시작주소를 가지고 있다.
// 그래서 부모클래스를 객체화하여 자식클래스에 할당할 수 없다.
// HongGilDong hgd=new Person(); 이렇게 안된다.

 

class에 abstract와 final 같이 사용할 수 없다.
abstract는 상속할래 final 상속 안해로 서로 대립되기 때문이다.

 

 

 

'성장 일기 > 쌍용교육센터' 카테고리의 다른 글

1226/문자열, 날짜 클래스  (0) 2022.12.26
1223/클래스 사용  (0) 2022.12.23
1221/상속  (0) 2022.12.21
1220/배열  (0) 2022.12.20
1219/배열  (0) 2022.12.19
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유