자바(java) 기초 4편.

1. 상속 ( Inheritance )

* 클래스들간의 관계
  ==> 학생, 대학생, 컴퓨터, 트럭, 엔진, 라디오

  가. is a
   : 대학생  is a  학생


  나. has a
   : 학생 has a 컴퓨터
   : 트럭  has a 엔진 ( 트럭과엔진은 같은 lifecycle을 갖는다.: composition)
     트럭  has a 라디오 ( 트럭과라디오는 다른 lifecycle을 갖는다.:aggregation)

  ==> 코드로 표현하는 방법

   class 트럭{
 
      엔진 e;  // 인스턴스 변수
 
     메소드(){
         라디오 r;  //로컬 변수
      }

   }

   class 엔진{

   }

   * public class Student{

           String name;
    int age;
      }
 
   **UML ( Unified Modeling Language )
    => 분석/설계 단계에서 나온 도식화된 문서를 만드는 언어.
    => 클래스 다이어그램 ( calss diagram)
     

   ** 상속정리
    – 클래스들간의 관계이다. ( is a )
    – 상속을 시키주는 클래스 : 부모클래스,super클래스,parent클래스
      상속을 받는 클래스 : 자식 클래스 , sub클래스 , child 클래스
    – 특징
      : 모든 클래스들은 상속관계이다. ( API + 사용자 정의 클래스 )
       ==> root 클래스( 최상위클래스) : java.lang.Object
       ==> 명시적으로 상속을 시키건, 안시키건 자동으로 Object을
       상속받는다.

      : 상속을 받으면 부모클래스의 모든 멤버(인스턴스변수+메소드)를
       선언없이 사용가능하다. ==> 재사용성
        단, 생성자와 private은 상속안됨.
      : 자식클래스을 생성하기 전에 반드시 부모 클래스를 생성한다.
       따라서 Object클래스는 가장 먼저 생성된다.==> 모든 클래스는
       Object 클래스의 멤버를 그냥 사용가능하다.
      : 자바는 단일상속만 지원한다. ( 명시적으로 부모는 하나이다.)

  예>  직원( Employee) , 관리자( Manager ) , 개발자(Engineer ), …

        직원


  관리자    개발자

 public class 관리자 extends 직원 {}
  public class 개발자 extends 직원 {}


2.  super 키워드

  : 상속관계에서만 사용가능하다.
  : 용도
    => 자식클래스에서 부모의 멤버(인스턴스변수+메소드) 또는
     부모 생성자를 명시적으로 호출할 때 사용한다.

   가. 부모의 멤버
     : super.멤버


    나. 부모 생성자 ( * )
     
     : super();
       super(10);
       super( 10 , “홍길동”);

     : 반드시 하위클래스의 생성자의 첫라인에서 사용되어야 한다.
     ( 모든 하위클래스의 생성자의 첫라인에는 자동으로 super() 가 삽입된다.)

     : 명시적으로 호출가능하다.

3. this 키워드
  : 상속과 무관
  : 같은 클래스에서 사용 가능하다.
  : 용도
    가. 인스턴스 변수를 명시적으로 가리킬 때
     ==> 인스턴스 변수와 로컬변수이름이 동일한경우에 사용가능하다.


    나. 오버로딩 생성자를 호출할때
      ==> 하나의 생성자안에서 다른 생성자를 호출할 때 사용된다.
      ==> 반드시 생성사 첫 라인에서 사용 가능하다.
    

4. 오버라이딩 메소드 ( overriding method )
 
  : 상속관계가 전제
  : 정의
   ==> 부모의 메소드를 자식이 수정해서 사용하는 메소드.
 
  : 규칙
    ==> – 메소드명이 일치
        – 리터타입이 일치
 – 인자리스트(argument list) 일치
 – 접근지정자는 확대만 가능
        – throws 예외는 축소만 가능.

    예>   super ==>  public void a() throws XXXException{}

          sub   ==>  public void a()  {}

5. 다형성( Polymorphism )

 :  상속이 전제
 : 재사용성 증가

 : 정의
 ==> 하나의 참조 변수가  여러 데이터형을 저장할 수 있는 능력.

  예 >
        Employee e = new Employee();  // 일반적 방법
 e = new Manager();  // 다형성
        e = new Engineer();  // 다형성

 Manager e3 = new Engineer(); ( X )

        Manager e = new Employee();   (X )


  이유>
       PDT

      정수형의 종류: byte , short , int , long

        short b = 12;
 int c = b;  //   큰타입 = 작은 타입; , 묵시적 형변환

 byte d = c;     // 작은타입 = 큰타입;   ( 형변환 연산자이용)


       RDT

       직원종류:  Employee, Manager, Engineer
 
           Employee = Manger;  // 큰타입  = 작은타입 , 묵시적 형변환
              
    Manger = Employee;  // 작은타입 = 큰타입 ( 형변환 )

 ==> Object o = 모든 클래스 객체가능.   (*)


  다형성의 사용예 >

    java.lang.Object 클래스의 2가지 메소드
      : toString()
      : equals(Object obj)
   예>  String str = “Hello”;
        String str2 = “Hello”;

     if( str == str2 ) (X)  ==> 위치값 비교
     if( str.equals(str2) )   ==> 실제값 비교

     ppublic boolean equals(String obj){ }
////////////////////////////////////////////////////
        Integer i = new Integer(“123”);
        Integer i2 = new Integer(“123”);
 
      if( i.equals(i2) )

      public boolean equals(Integer obj){ }
////////////////////////////////////////////////////

  결론은
      public boolean equals(Object obj){ } //다형성 적용

6. Object

  가. toString 메소드
    : 문자열로 바꾸는 메소드
    : 숫자(기본형)–> 문자열
      참조데이터 –> 문자열
    : 모든 참조변수를 출력하는 자동으로 toString 메소드가 호출된다.

   예> Student stu = new Student(“홍길동”);
      System.out.println( stu );
      ystem.out.println( stu.toString() );
      // stu가 가지는 위치값을 문자열로 변경해서 출력한다.
     

           Object ( toString() )
                     ==> 패키지명.클래스명@16진수 로 구현됨.

Stdent      String     Integer
            ==> 거의 API 는 toString메소드를 오버라이딩 했다.
         ( 실제값을 문자열로 출력하게 구현됨 )

            사용자정의 클래스는 Object 클래스의 toString 메소드를
     그냥 사용하면 실제값이 아니고 클래스명@16진수로 문자열이 출력된다. 실제값을 출력할려면 overriding 해야 된다.
             ==> 사용자 정의 클래스를 출력하는 경우는 디버깅 용으로 사용됨.


  나. equals(Object obj) 메소드

     : 실제값 비교하는 메소드
    
   예>
       String str = “Hello”;
       String str2 = new String(“Hello”);

       if( str.equals(str2)) ==> true
       ==> 대부분 API가 실제값 비교하게 오버라이딩 됨.
          Object  (equals) ==> == 으로 비교됨.

        ==> 사용자생성 클래스도 실제값으로 비교하게 오버라이딩 하자.
       
   Student    String

7.  인터페이스 ( Interface )
   : *.java
   : 문법
    
      public interface  인터페이스명{ }

   : 구성요소
     – 상수
      ==> public static final 로 자동 지정된다.

     – 추상 메소드 ( abstract method )
      ==> signature 만 정의 ( 구현이 없다. {} 이 없다. )
      ==> public abstract 자동으로 지정된다.

      예>  public void a() {  } // concreate 메소드(구현된 메소드)
           public void a();     // abstract 메소드( 추상 메소드 )
              ==> abstract 메소드를 concreate 메소드로 만들어야 된다.
           (일반 클래스에서 추상메소드를 구현해야 된다. )

    : 특징
      ==> 객체생성불가 ( new 불가 )
      ==> 다른 클래스를 통해서 인터페이스의 구성요소를 사용 가능.
         ( 인터페이스와 클래스관계는 ‘준 상속관계’이다.
    구현관계라고 한다. ( implements 관계 )
      ==> 구현 클래스에서는 반드시 인터페이스의 추상메소드를 구현해야 된다.
         ( 강제성 ,
      ==> 구현 클래스는 여러 인터페이스를 implemnents 가능하다.
          ( 다중 구현이 가능하다. )
      ==> 인터페이스 끼리 상속 가능 (다중 상속 )
      ==> 인터페이스는 변수타입으로 사용가능하다. ( 다형성)

     인터페이스(A)  ( public void a(); )
                   : 오버라이딩 규칙에 준함.
      클래스(B)    (  public void a() {  } )

   public interface A {

     public void a();
   }

   public class B implements A , AA , AAA{
      public void a() {  }
   }

   public interface A extends AA, AAA { }


   – 사용용도
     : 하위 클래스에게 통일된 메소드를 강제할 목적으로
       ( 재사용 증대 )
    
    예>

     Bird         SuperMan       Airplane
   : a(){}         : aa(){}      : aaa(){}   ==> 이륙
   : b(){}         : abb(){}      : bbb(){}   ==> 비행
   : c(){}         : cc(){}      : ccc(){}   ==> 착륙

 ==> 통일을 하자  ( 강제성이 없다. 해도 그만안해도 그만)

     Bird                SuperMan             Airplane
   : takeOff(){}         : takeOff(){}      : takeOff(){}   ==> 이륙
   : fly(){}         : fly(){}               : bbb(){}   ==> 비행
   : land(){}         : land(){}             : ccc(){}   ==> 착륙

 ==> 통일을 하자  ( 강제성이 주자 ). 중요하다.

                    Flyer (인터페이스)
       takeOff();
       fly();
       land();

   Bird                SuperMan             Airplane
   : takeOff(){}         : takeOff(){}      : takeOff(){}   ==> 이륙
   : fly(){}         : fly(){}               : bbb(){}   ==> 비행
   : land(){}         : land(){}             : ccc(){}   ==> 착륙

 ===========> JDBC ( Java DataBase Connectivity )
             : 데이터베이스(오라클,mysql,mssql,DB2,..)와 자바언어와 연동하는 기술.


   예>

     자바 ———> 오라클 (자바A)
          ———> mysql(자바B)

8. 추상 클래스( abstract class )
 
  : *.java
  : 문법
    public abstract class 클래스명{ }

  : 구성요소
    – 인스턴스변수
    – 일반 메소드 ( concreate method )
    – 생성자
    – 추상메소드 ( abstract method )

  : 특징
   ==> 객체생성불가( new 사용 불가 )
   ==> 다른 클래스를 이용해서 구성요소를 사용 가능하다. ( 상속관계 )
       ( 실선표기, extends 표기법 )
   ==> 추상메소드가 없어도 추상클래스로 선언 가능
      ( 추상메소드가 하나라도 있으면 반드시 추상클래스로 정의한다. )
   ==> 일반클래스는 반드시 추상메소드를 구현해야 된다. ( 강제성, 통일성 )
   ==> 추상클래스를 변수의 타입으로 사용 가능하다.
 
   예>   추상클래스(  A  )
   
         일반클래스 ( B )
     
      public abstract class A {}

      public class B extends A {}

  : 용도
   ==> 여러가지 메소드들중에서 일부메소드만 하위 클래스에게 강제할 목적.


9. 예외처리

 – 예외?
  ==>  자바에서는 exception 이라고 한다.
  ==> 프로그램 실행중에 발생되는 문제를 의미한다. ( 보통은 에러 라고 함 )
  ==> 비정상 종료가 된다.

 -예외처리?
  ==>  비정상종료가 아닌 정상종료하게 만드는 것을 의미
  ==> exception handling 이라고 한다.

 – 예외처리 방법
   : 발생된 예외처리를 담당하는 클래스가 제공된다. ( 예외클래스:Excepton 클래스라고 한다. )
   : try ~ catch 문
   : throws 문

 – 예외클래스의 계층구조 ( 상속관계 )

                Object
    |
  Throwable

     |
  Error                      Exception
                                |
            RuntimeException         IOException     SQLException
             |  
            ArithmeticException
     NullPointerException
            IndexOutOfBoundsException
            ClassCastException
     (실행시 발생)

     IOException
      |
            FileNotFoundException


  가. try~catch 문 이용

  문법:
  
     try{

        //예외발생코드

     }catch(XXXException e){

        // 예외처리 코드
     }
     
 예>
       0 (예외발생 ) ==> 비정상 종료
      try{
       1
       2 (예외발생)
       3  

     }catch(XXXException e){

        4
     }
        5

 2에서 예외발생되면?   0 1  4  5
 2에서 예외발생안되면? 0 1  2 3  5

관련 글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다