Java/Java

Java 06. OOP( Object Oriented Programming) 특성

shin96bc 2022. 3. 9. 18:26

(1) 상속성( Inheritance )
     1) 부모의 '모든 것'을 자식에서 '상속'받는 것(=='사용'할 수 있는 것)
     2) 다른 생성자가 하나도 없을 때 만 JVM이 
          ( 자식객체가 생성되려면 먼저 부모객체가 생성되어야 함)
     3) 모든 생성자의 첫라인에는 Super();가 생략되어 있음
          ( 단, 다른 super(...)가 있다면 예외)
     4) 자식메소드에서 부모메소드의 내용을 변경할 수 있음( overriding )
     5) 모든 객체는 Object의 자식 ( 묵시적 상속 )
     6) 형변환 
          <1> 자동형변환 by JVM ( 자식 -> 부모 )

               1> class Superman extends Human {}

                    Superman sm = new Superman();

                    Human m = sm;


          <2> 강제형변환 by 개발자 ( 부모 -> 자식 )

               1> 강제형변환은 한번 부모타입으로 바꾸었던 자식객체의 타입을 되찾을 때만 사용해야 한다.

               2> 올바른 예시

                    ex) Superman sm2 = (Superman)m;  ( O )

               3> 잘못된 예시

                    ex) Human m2 = new Human();

                         Superman sm3 = m2;               ( X )

           
     7) 형제관계(남남)는 상속과 무관 ( 형변환X )

 

(2) 다형성( Polimorphism )
     1) 같은 타입 객체의 같은 메소드가 '다른일'을 하는 것

     2) 오버라이딩( Overriding )
          <1> (상속관계에서)부모의 메소드 내용을 자식에서 바꾸는 것

          <2> 조건
               1> 메소드 이름이 일치해야 함
               2> 반환타입이 일치해야 함
               3> 파라미터의 타입과 순서와 갯수가 모두 일치되어야 함
               4> 생성자 불가
               5> 자식메소드의 접근제한자는 부모메소드의 접근제한자보다 같거나 넓어야 함

 

     3) 오버로딩 ( OverLoading )
          <1> 정의
               1> (그형태에 따라 매핑되어 호출되도록 )파라미터의 종류나 순서나 갯수가 다른,

                   같은 이름의 메소드나 생성자를 '여러개 정의하는 것'
      
          <2> 종류
               1> 생성자
               2> 메소드

          <3> 특징
               1> 반환타입과는 관련 없음
               2> 상속관계라면 다른 클래스에서도 오버로딩이 가능
               3> 형변환이 가능한 파라미터라도 오버로딩으로 인정

 

     4) 인터페이스( interface )
          <1> 정의
               1> JDK7이하: '상수'와 '추상메소드'로 구성된 껍데기
               2> JDK7이하: '상수'와 '추상메소드'와 'static메소드'와 'default메소드'로 구성된 껍데기
          <2> 특징
               1> 인터페이스 객체는 완벽한 자식클래스를 만들어서 객체 생성후 형변환해서 만듬
               2> interface 의 static 메소드는 인터페이스 이름으로만 접근 가능
               3> 자식클래스를 만들 때는 implements 를 사용하고 다중상속도 가능
               4> 인터페이스끼리의 상속에는 extends 를 사용하고 다중상속도 가능
                    ex) interface Inter extends Inter1, Inter2, 등등...
               5> 일반적인 형태의 자식클래스
                    ex) class Child extends Human implements Inter1, Inter2, ...)
               6> 상수 앞에는 public static final 생략
               7> 메소드 앞에는 public abstract 생략
               8> 인터페이스 앞에는 abstract 생략

 

     5) 추상클래스와 인터페이스 공통점/차이점
          <1> 공통점
               1> 추상메소드를 가질 수 있음
               2> 완벽한 자식객체를 생성해서 형변환해서 객체를 생성

          <2> 차이점
               1> 클래스이고 인터페이스임
               2> 추상클래스는 일반멤버(상수X)와 일반메소드와 생성자를 가질 수 있음

               3> 클래스명 앞에 abstract 생략불가

 

(3) 은닉성( Information Hiding )
     1) 외부프로그램으로부터 '속성값'을 감추는 것
          <1> 멤버를 private 으로 놓고 선택적으로 메소드를 통해 접근하도록 하는 것

               ex) private long balance = 10000L;

                    void setBalance(long balance){ //setter 메소드 
                         this.balance = balance;
                    }
                    long getBalance(){ //getter 메소드 
                         return balance;

                    }

 

(4) 캡슐화( Encapsulation )
     1) 메소드의 구현 내용을 몰라도 그 형태만 알면 사용할 수 있는 것.

     2) 메소드가 어떤 일을 하는지 알고, 그 이름만 안다면 호출해서 사용할 수 있는 것을 말한다.

     3) 메소드의 사용법만 안다면 메소드 내부의 로직을 몰라도 사용할 수 있다.

'Java > Java' 카테고리의 다른 글

Java 08. 제한자( Modifier ) 와 식별자 ( Identifier )  (0) 2022.03.10
Java 07. 예외 처리  (0) 2022.03.09
Java 05. 컬렉션 ( Collection )  (0) 2022.03.09
Java 04. 배열 ( Array )  (0) 2022.03.09
Java 03. 제어문  (0) 2022.03.08