05 OOP 이해 및 실습 - OOP 기본 학습
- 생성자 함수 (Constructor)
- 클래스 객체가 생성될 때(new로 인스턴스 생성하면) 자동으로 호출되는 메소드
- public 클래스이름() { … } 형태
- 매개변수 없이도 만들 수 있고 오버로딩으로 매개변수를 넣어서 만들 수 있다. 호출 시에 매개변수를 주어서 초기화 가능
- 부모 클래스에 기본 생성자가 있을 때 자식 인스턴스 생성 시, 자동으로 부모 클래스 기본 생성자가 먼저 호출된다.
- static 키워드
- new 인스턴스 객체 생성 없이 바로 메서드나 변수를 사용 가능하도록 하는 키워드
- 함수나 변수 제일 앞에 static을 붙여주면 사용 가능
- staitc 함수 안에서는 this를 사용할 수 없다.
- 메인에서 사용 시 클래스이름.static함수나 변수이름 형식으로 값을 가져온다.
- ex) StaticClass.a;
06 OOP 이해 및 실습 - OOP 심화 학습
- 캡슐화(Encapsulation)
- 객체의 필드, 메소드를 하나로 묶고 실제 구현 내용을 감추는 것
- 외부 객체는 객체 내부 구조를 알지 못하고 제공하는 필드와 메소드만 이용 가능하다.
- 캡슐화 사용 이유는 외부에서 객체가 손상되지 않도록 하는 것이다.
- 캡슐화를 위해 접근 제한자(Access Modifier)을 사용한다.
- 상속(Inheritance)
- 부모 객체의 필드와 메소드를 자식 객체에게 물려주는 것
- 자식 객체는 부모 객체를 확장하여 추가적인 필드와 메소드를 가질 수 있다.
- private가 default 접근을 갖는 필드와 메서드는 상속 불가하다. 주로 protected 사용
- extends 키워드
- 자식 클래스가 상속할 부모 클래스를 지정하는 키워드
- public class 자식클래스 extends 부모클래스 { … } 형태
- 자바는 단일 상속이기 때문에 여러 개의 부모 클래스를 상속받을 수 없다.
- super
- 부모 클래스의 생성자 함수 호출
- super(매개변수) 식 호출이면 부모 클래스의 해당 매개변수의 필드 생성자를 호출한다.
- super와 this 정리
- this.
- 자기 클래스의 필드/메소드 접근
- this()
- 자기 클래스의 생성자 함수 호출
- super.
- 부모 클래스의 필드/메소드 접근
- super()
- 부모 클래스의 생성자 함수 호출
- this.
- Override
- 부모 클래스에서 상속 받는 메소드를 자식 클래스에서 재정의하는 것
- 오버라이드 조건은 반환타입, 함수이름, 매개변수가 동일해야 한다.
- 자식 클래스에서 메소드가 재정의된다면, 부모 클래스의 메소드는 무시된다.
- 메소드 재정의 조건
- public을 default나 private로 수정 불가
- default는 public으로 수정 가능
- Exception throws 불가
- final 키워드
- final 필드
- 수정 불가 필드 (상수 선언)
- 값 대입 시 다시 대입 불가
- final 클래스
- 부모 클래스로 사용 불가 (상속 불가)
- final 메소드
- 자식 클래스가 재정의할 수 없는 메소드 (오버라이딩 불가)
- final 필드
- 다형성(Polymorphism)
- 하나의 타입에 여러 가지 객체를 대입하여 다양한 실행 결과를 얻는 것
- 하위 클래스에서 각 함수명을 통일해서 사용 가능
- 객체를 부품화 시키고 유지보수 용이하다.
- 자동 타입 변환(Promotion)
- 프로그램 실행 도중에 자동 타입 변환이 일어나는 것
- 바로 상단의 부모가 아니더라도 상속 계층의 상위면 자동 타입 변환 가능
- 업 캐스팅
- 자식 객체가 부모 클래스 타입을 가지는 것
- 부모클래스 변수 = new 자식클래스(); 형태
- 강제 타입 변환(Casting)
- 부모 타입을 자식 타입으로 변환하는 것
- 다운 캐스팅
- 자식 타입을 부모 타입으로 자동 변환 후, 다시 자식 타입으로 변환할 때
- 자식클래스 변수 = (자식클래스) new 부모클래스(); 형태
- 필요한 경우
- 자식 타입이 부모 타입으로 자동 변환, 부모 타입에 선언된 필드와 메소드만 사용 가능
- 자식 타입에 선언된 필드와 메소드를 다시 사용해야 할 경우
- 객체 타입 확인 (instanceof)
- 강제 타입 변환 전에 먼저 자식 타입인지 확인 후 강제 타입 실행해야 한다.
- if(부모객체 instanceof 자식객체) { 강제 타입 변환 }
- 매개변수가 클래스 타입일 경우
- 해당 클래스의 객체 대입이 원칙이나 자식 객체 대입하는 것도 허용
- 추상 클래스 (abstract)
- 클래스들의 공통되는 필드와 메소드를 정의한 클래스
- public abstract class 클래스명 { … } 형식으로 추상 클래스 선언
- new 연산자로 객체 생성하지 못하고 상속으로 자식 클래스만 생성 가능하다.
- 추상 클래스에서는 메소드의 선언부만 작성하고, 실행 내용은 실체 클래스에서 오버라이딩하여 작성한다.
- 추상 메소드 선언
- public abstract 리턴타입 메소드명(매개변수) 형식
- 인터페이스의 메소드는 키워드 생략하더라도 자동으로 추상 메소드로 선언
- 인터페이스 (interface)
- [public] interface 인터페이스명 {…} 형식으로 선언
- 메소드는 추상 메소드만 있는 클래스
- 인터페이스는 상수 필드만 선언 가능하다. 상수명은 대문자로 작성, 언더바 사용
- 인터페이스에 선언된 필드는 모드 public static final
- 선언과 동시에 초기값 지정해야 한다.
- 인터페이스는 다중 상속이 되므로 implements 옆에 여러 개의 인터페이스를 선언할 수 있다.
- JDK8부터 default 메소드가 추가되었다. 인터페이스에서 일반 메소드처럼 정의 가능 (public default void 메소드명() {…})
- 구현 클래스 선언
- public class 구현클래스명 implements 인터페이스명 { 인터페이스에 선언된 추상 메소드의 실체 메소드 선언 } 형식
- 인터페이스의 모든 추상 메소드를 재정의해야하고, 일부만 재정의할 경우 추상 클래스로 선언하여 사용
- 인터페이스 간 상속
- public interface 하위인터페이스 extends 상위인터페이스1, 상위인터페이스2 {…} 형식
- 하위 인터페이스 구현 클래스는 상위, 하위 인터페이스 모두 추상 메소드 재정의 해야 한다.
- abstract와 interface 차이
- 추상 메소드
- 둘다 존재
- 일반 메소드
- abstract는 있고, interface는 없음 (default 메소드만 있음)
- 예약어
- abstract class
- abstract 메소드명
- extends
- interface
- implements
- abstract class
- 다중 상속
- abstract는 불가능, interface는 가능
- 객체 생성(new)
- 둘 다 불가능
- abstract는 상속으로, interface는 구현으로
- 접근 제한자
- abstract
- public, protected, private
- interface
- public
- abstract
- 필드 선언(멤버 변수)
- abstract는 가능, interface는 public static만 가능
- 추상 메소드
'교육 (Today I Learned) > Hanaro' 카테고리의 다른 글
[Hanaro] 42일차 / Java (Collection, JDBC, 기본 SQL문, DB연결) (0) | 2024.03.18 |
---|---|
[Hanaro] 41일차 / Java (API Method, Exception, Thread, I/O) (0) | 2024.03.15 |
[Hanaro] 39일차 / Java (Array, Class, method, 접근 제어자, 싱글톤 패턴) (0) | 2024.03.12 |
[Hanaro] 38일차 / Java (제어문) (0) | 2024.03.12 |
[Hanaro] 37일차 / Java (연산자, Scanner) (0) | 2024.03.09 |