자바 2/6 요약 (1)

KIHYUK MOON·2023년 2월 5일
0
post-thumbnail
post-custom-banner

상속

자식 클래스가 부모 클래스의 기능을 그대로 물려받을 수 있는 기능

  • 클래스 상속을 위해서는 extends 키워드를 사용

상위객체를 재사용해 하위객체를 빠르게 설계할 수 있도록 도와주고, 이미 잘 개발된 개체를 재사용해서 새로운 객체를 만들기 때문에 반복된 코드를 줄여줌

상속의 장점

  • 기존에 작성된 클래스를 재활용
  • 중복 코드를 작성하지 않아도 됨
  • 클래스간의 계층적 관계를 구성함으로 다형성의 토대가 됨

자바의 상속 방식

  • 다단계 상속 및 계층적 상속 지원하며 다중상속은 지원하지 않는다
  • 다중상속을 지원하지는 않으나 interface를 통해서 다중상속과 유사한 형태의 상속 기능을 제공

상속 기본

클래스 상속을 위해서 extends 라는 키워드 사용
부모의 필드 및 메소드를 상속 받으므로 아무런 구현을 하지 않아도 부모로부터 상속받은 필드와 메소드를 사용할 수 있다.

final 클래스와 final 메소드

  • final 키워드는 클래스, 필드, 매소드 선언 시에 사용 할 수 있다. final 키워드는 해당 선언이 최종 상태이고 수정 할 수 없음을 나타낸다.

  • static final

  • 내용이 더 이상 변경되지 않고 객체 생성이 되지 않도록 만듬

객체 타입 확인(instanceof)

boolean result = 좌향(객체) instanceof 우향(타입)

  • 객체 타입을 확인하는 연산자
    주로 상속관계에서 부모객체인지 자식 객체인지 확인하는데 사용

    다형성

    객체지향개념에서 다향성이란 여러가지 타입을 한가지 타입으로 처리 할수 있는기술을 의미 하며, 자바에서는 한 타입의 참조변수로 여러타입의 객체를 함조 할 수 있음

    부모클래스 타입의 참조 변수로 자식클래스의 인스턴스를 참조 할 수 있다 라는 의미

    super, super()

    super

    자식 클래스가 부모클래스로부터 상속받은 멤버를 참조할 때 사용하는 참조변수

  • this와 반대개념

    super()

    부모클래스의 생성자를 호출하는 메소드

  • 상속받은 자식 클래스가 부모클래스의 멤버를 사용할 경우가 있을 수도 있으므로 부모클래스를 우선적으로 초기화 해줘야 한다.

  • 부모클래스의 생성자는 자식클래스의 생성자 첫 줄에서 호출해준다

  • 기본적으로 별도의 호출없이도 기본 생성자를 자동으로 호출해 주지만, 부모클래스의 생성자가 기본생성자가 아니라면 자동으로 추가되지 않으므로 super()로 추가해줘야한다

    싱글톤

    프로그램 전체에서 단 하나의 객체만 만들도록 보장해야하는 경우가 있다. 단 하나만 생성된다고 해서 이 객체를 싱글톤이라고 한다.

    사용 이유

  • 메모리 낭비를 방지할 수 있다

  • 다른 클래스 간에 데이터 공유가 쉽다.

    문제점

  • 구현하는 코드가 복잡하다

  • 멀티 스레딩 환경에서 발생할 수 있는 동시성 문제 해결을 위해 syncronized를 사용해야함

    Singleton obj1 = Singleton.getSingleton();

    public class Singleton {
       String name;
       int id;
       private static Singleton singleton = new Singleton();
       private Singleton() {
           name = "test";
           id = 100;
       }
       static Singleton getSingleton() {
           return singleton;
       } 
    }
# 추상클래스

## 추상클래스
하나 이상의 추상 메소드를 포함하는 클래스를 가리켜 추상 클래스(abstract class)라고 합니다
* 객체 지향 프로그래밍에서 중요한 특징인 다형성을 가지는 메소드의 집합을 정의할 수 있도록 해줍니다.
* 추상클래스를 상속받는 자식클래스들이 무조건 구현해내야 하는 특성을 가졌다.

abstract class 클래스이름 {
...
abstract 반환 타입 메소드이름();
...
}


## 추상메소드

자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미
추상 메소드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위함


# 인터페이스

* 다중상속 지원
* 인터페이스(interface)는 오로지 추상 메소드와 상수만을 포함

추상클래스와는 달리 인터페이스의 모든 필드는 public static final이어야 하며, 모든 메소드는 public abstract이어야 합니다

## 디폴트 메소드(Default Method)

인터페이스에서는 구현부가 있는 메소드를 만들 수 없는 것이 기본적인 특징이나 예외적으로 디폴트 메소드를 만들 수 있다.
- 메서드 앞에 default 예약어를 붙인다.
- 구현부 { }가 있어야 한다.

# 다운캐스팅과 instanceof

상위 클래스형으로 변환되었던 하위 클래스를 다시 원래 자료형으로 변환하는 것

**intstanceof** = 형 변환 가능 여부를 확인하기 위함

 if(ani instanceof Human)
 	Human h = (Human) ani;
    h.readBook();
    
    
# 어노테이션
- 컴파일러에게 코드 문법의 에러를 체크하도록 정보를 제공
- 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성 할 수 있도록 정보를 제공
- 실행 시 특정 기능을 실행하도록 정보를 제공 (Spring 프레임워클에서 Controller 기능 구현 시 사용 됩니다.)

## 종류
- 표준(내장)어노테이션 : 자바가 기본적으로 제공해주는 어노테이션
- 메타 어노테이션 : 어노테이션을 위한 어노테이션
- 사용자정의 어노테이션 : 사용자가 직접 정의하는 어노테이션


### 표준 어노테이션

- Override
- Deprecated
- FunctionalInterface
- SuppressWarnings
profile
개발자 전직중..
post-custom-banner

0개의 댓글