객체지향언어 TIP (2)

    팁 작성에 앞서, 개념을 알기는 하지만 놓칠 수 있는 부분들이나 다시 한 번 복기하면 좋을만 한 것들을 정리해둔 것이기 때문에

    처음 공부하시는 분들에게는 적절하지 않을 있습니다.

     

    객체지향언어 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

    댓글