팁 작성에 앞서, 개념을 알기는 하지만 놓칠 수 있는 부분들이나 다시 한 번 복기하면 좋을만 한 것들을 정리해둔 것이기 때문에
처음 공부하시는 분들에게는 적절하지 않을 수 있습니다.
✶ 객체지향언어 TIP (2)
*상속 : 기존 클래스를 사용하여 새로운 클래스 작성
- 재사용성 ↑, 중복 제거
- 키워드 : extends
- Super & sub, Based & drived
*sub 클래스는 super 클래스의 모든 멤버를 상속받지만 생성자와 초기화 블럭은 상속받지 않는다.
*클래스 간 포함관계를 맺어주는 것 : 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것
*포함관계와 상속관계 구별
- A는 B이다. : 상속관계
- A는 B를 가지고 있다. : 포함관계
*자바는 단일 상속만이 가능하다.(다중 상속 불가능)
*Object Class 는 모든 클래스의 super class로서 최상위 클래스이다.
*Overriding(재정의)
상속받은 메서드의 내용을 클래스에 맞게 변경하는 것
*Overriding 조건
- 메서드의 선언부(이름, 매개변수, 반환 타입)가 일치해야한다.
- 접근 제어자는 super class의 메서드보다 좁은 범위로만 변경 가능
- 기존 예외보다 더 많은 에외 선언 불가능
*super 키워드
Sub class 에서 Super class 로부터 상속받은 멤버를 참조하는데 사용되는 참조변수
*super()
Sub class 에서 super class 의 생성자를 호출할 때 사용
*패키지명은 클래스명과 헷갈리지 않게 소문자로 하는 것이 암묵적인 룰이다.
*import 문
패키지명을 미리 선언해줌으로서 후에 해당 클래스에 포함되어 있는 기능들을 추가적인 선언없이 사용할 수 있다.
(+ 패키지명.* 을 사용하면 패키지 내의 모든 클래스들을 사용 가능)
(+ 자동 선언 단축키 : ctrl(cmd) + shift + O)
*static import문
Static 멤버를 호출할 때 클래스 이름 생략 가능
Ex> Math.random() → random(), Math.PI → PI
*제어자 종류
- 접근 제어자 : public, protected, (default), private
- static, final, abstract, native, transient, synchronized, volatile, strictfp
*접근제어자
- Public : 접근 제한 X
- Protected : 같은 패키지 + 다른 패키지의 sub class 에서 접근 가능
- (Default) : 같은 패키지 내 접근만 가능
- Private : 같은 클래스 내 접근만 가능
*캡슐화(Encapsulation)
접근제어자를 이용하여 외부로부터 데이터를 보호한다. 접근성을 제한하고 getter, setter 메서드를 제공하는 것이 바람직하다.
*다형성(Polymorphism)
한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있는 것
*참조변수의 형변환
class A extends B 인 경우,
B b = new B();
A a = (A)b; → 형변환 생략가능
B b2 = (B)a; (super → sub 의 경우 형변환 생략불가)
*’instance of’ 연사자
’인스턴스명’ instance of ‘class명’ : Boolean 값을 반환하며 true 가 나오면 해당 클래스의 인스턴스가 맞다는 것이다.
*매개변수의 다형성
Void info(Product p){ }
→ Product 클래스를 상속받는 모든 클래스에 대해 메서드 수행 가능
(+ Tv t = new Tv(); b.buy(t); → a.info(new Tv()); 축약 가능)
*객체를 배열에 넣을 수 있다.
*Abstract Class
미완성 메서드를 포함하고 있는 클래스이다.
- 미완성이므로 인스턴스 또한 생성불가이다.
- 미완성 메서드는 상속받는 클래스에서 반드시 오버라이딩해주어야한다.
- Abstract 이더라도 미완성 메서드가 있을 뿐이지 생성자, 멤버변수, 완성된 메서드 모두 가질 수 있다.
*Interface
추상클래스와 비슷하지만 오직 추상메서드와 상수만을 멤버로 가질 수 있다.
- 접근제어자로 ‘public’과 ‘default’만 가능
- 모든 멤버변수 : public static final (생략가능)
- 모든 메서드 : public abstract (생략가능)
- 인터페이스는 인터페이스로부터’만’ 상속받을 수 있으며 다중상속이 가능하다.
- 인터페이스 구현 키워드 : implements
- 상속과 구현 동시에 가능(선언 순서 : extends → implemnets)
- 인터페이스 타입의 참조변수로 인터페이스를 구현한 클래스의 인스턴스를 참조할 수 있다.
- 매개변수 또는 리턴타입이 인터페이스라는 것은 인터페이스를 구현한 클래스의 인스턴스를 제공 또는 반환해야 한다는 것이다.
*인터페이스에서 default 메서드와 static 메서드 선언이 가능하다.
*Inner class
선언 위치에 따라 instance class, static class, local class 로 나뉘고 선언과 객체 생성을 동시에 하는 경우 anonymous class 가 된다.
*인스턴스 멤버는 같은 클래스에 있는 인스턴스 멤버와 static 멤버 모두 직접 호출이 가능하지만 static 멤버는 인스턴스 멤버를 직접 호출할 수 없다. 이와 같이 인스턴스 클래스 또한 그렇다.
*Inner Instance Class의 객체 생성 예시
Class outer {
class InstanceInner {
}
}
→ 외부 클래스의 인스턴스를 먼저 생성해주어야 내부 인스턴스 클래스의 인스턴스를 생성할 수 있다.
Outer oc = new Outer();
Outer.InstanceInner ii = oc.new InstanceInner();
*Anonymous Class
클래스의 선언과 객체의 생성을 동시에 하기 때문에 단 한 번만 사용될 수 있고 하나의 객체만을 생성할 수 있으며 이름이 없다.
- 생성자를 가질 수 없다.
- 하나의 클래스 또는 하나의 인터페이스만 구현할 수 있다.
*익명 클래스의 선언 예시
new ’name’(){ }
*매개변수가 있는 메서드는 반드시 작업 전에 넘겨받은 값의 유효성 검사를 해야 한다.
'Java > Grammar' 카테고리의 다른 글
예외처리 TIP (0) | 2022.12.16 |
---|---|
객체지향언어 TIP (1) (0) | 2022.11.14 |
배열 TIP (0) | 2022.11.04 |
조건문 & 반복문 TIP (0) | 2022.10.24 |
연산자 TIP (0) | 2022.10.24 |
댓글