본문 바로가기
JAVA

객체지향 프로그래밍2

by moonstal 2022. 3. 6.

- 상속:

  기존의 클래스로 새로운 클래스를 작성하는 것

  두 클래스를 부모와 자식으로 관계를 맺어주는것

  class 자식클래스 extends 부모클래스{}

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

  자손의 멤버 개수는 조상보다 적을 수 없다.

  자손의 변경은 조상에 영향을 미치지 않는다.

 

- 포함관계: 클래스의 멤버로 참조변수를 선언하는 것(객체 생성)

  작은 단위의 클래스를 만들고, 이 들을 조합해서 클래스를 만든다.

 

- 관계결정

  상속 ~은 ~이다.

  포함 ~은 ~을 가지고 있다. (대부분)

 

- 자바는 단일 상속만 허용한다.

- 비중이 높은 클래스 하나만 상속관계로, 나머지는 포함관계로 한다.

- Object클래스 모든 클래스의 조상

 

- 오버라이딩: 상속받은 조상의 메서드를 자신에 맞게 변경하는 것

  선언부 변경불가 내용만 변경가능

  - 조건:

  선언부가 조상클래스의 메서드와 일치

  접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.

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

 

- 오버로딩: 기존에 없는 새로운 메서드 정의 상속과 관계없음

- 오버라이딩: 상속받은 메서드 내용을 변경하는 것

 

- this 인스턴스 자신을 가리키는 참조변수. 인스턴스의 주소가 저장되어있음

- super : this와 같음. 조상의 멤버와 자신의 멤버를 구별하는 데 사용.

- super() 조상의 생성자 

  자손클래스의 인스턴스를 생성하면, 자손의 멤버와 조상의 멤버가 합쳐진 하나의 인스턴스가 생성된다.

  조상의 멤버들도 초기화되어야 하기 때문에 자손의 생성자의 첫 문장에서 조상의 생성자를 호출해야 한다

 

-패키지(package): 서로 관련된 클래스와 인터페이스의 묶음.

-import문:사용할 클래스가 속한 패키지를 지정하는데 사용

 import문은 패키지문과 클래스선언의 사이에 선언한다

 

- 접근제어자

 private: 같은 클래스 내에서

 default: 같은 패키지 내에서

 protected: 같은 패키지 내에서, 다른 패키지의 자손 클래스 내에서

 public: 접근 제한 없음

 

- 캡슐화와 접근제어자

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

  메서드를 통한 간접접근

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

 

- 다형성

  여러가지 형태를 가질 수 있는 능력

  조상 타입 참조 변수로 자손 타입 객체를 다루는 것 Tv 리모콘으로 스마트Tv 조종

  Tv t = new SmartTv(); 타입 불일치 가능

  자손타입의 참조변수로 조상 타입의 객체를 가리킬 수 없다.

  SmartTv s = new Tv(); 에러

 

- 참조변수의 형변환

  사용할 수 있는 멤버의 갯수를 조절하는 것

  조상 자손 관계의 참조변수는 서로 형변환 가능

 

- instanceof 연산자

  참조변수의 형변환 가능여부 확인에 사용. 가능하면 true 반환

 

- 매개변수의 다형성

  참조형 매개변수는 메서드 호출시 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있다.

 

- 추상 클래스

  미완성 설계도 미완성 메서드를 갖고 있는 클래스(몸통{}이 없음)

  미완성 인스턴스 생성 불가

  상속을 통해 추상메서드를 완성해야 인스턴스 생성 가능

  꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우

  여러 클래스에 공통적으로 사용될 수 있는 추상클래스를 바로 작성하거나

  기존클래스의 공통 부분을 뽑아서 추상클래스를 만든다.

 

- 인터페이스

  추상 메서드의 집합

  구현된 것이 전혀 없는 설계도 껍데기 모든멤버가 public

  public abstract 생략가능

  (상수, static, 디폴트)

 

- 인터페이스 상속

  인터페이스의 조상은 인터페이스만 가능

  다중 상속 가능(추상메서드는 충돌해도 문제 없음)

 

- 인터페이스 구현

  인터페이스에 정의된 추상 메서드를 완성

  class 클래스이름 implements 인터페이스이름{}

 

- 추상클래스와 인터페이스 차이점: 인터페이스는 iv가질 수 없음

 

- 인터페이스를 이용한 다형성

- 인터페이스 장점

  두 객체간의 연결, 대화, 소통을 돕는 중간역할을 한다.

  선언과 구현을 분리시킬 수 있다.

  개발 시간을 단축할 수 있다. 껍데기로 사용

  변경에 유리한 유연한 설계

  표준화 가능

  서로 관계없는 클래스들의 관계를 맺어줄 수 있다.

  

- 인터페이스에 새로운 메서드(추상메서드)를 추가하기 어려움-> 디폴트 메서드

  - 디폴트 메서드가 기존의 메서드와 충돌시 해결책 

   인터페이스를 구현한 글래스에서 디폴트 메서드 오버라이딩

   조상클래스 메서드 상속 디폴트 메서드 무시

 

- 내부 클래스

  클래스 안의 클래스

- 장점

  내부 클래스에서 외부 클래스의 멤버를 쉽게 접근할 수 있다.

  코드의 복잡성을 줄일 수 있다.

 

- 익명 클래스

  이름이 없는 일회용 클래스 정의와 생성을 동시에

  new 조상/인터페이스(){}

'JAVA' 카테고리의 다른 글

java.lang패키지와 유용한 클래스  (0) 2022.03.08
예외처리  (0) 2022.03.07
객체지향 프로그래밍  (0) 2022.03.05
배열  (0) 2022.03.04
조건문과 반복문  (0) 2022.03.04