기본 콘텐츠로 건너뛰기

0.10 Object Oriented Programming (2)

Object Oriented Programming (2)


1. polymorphism(2)
2. Encapsulation
3. Method Syntax
4. Overloading
5. 생성자



1. polymorphism(2)


 - 일반적인 것과 구체적인 것 사이에서 "관계"가 생성되고 그에 따라 "공유"의 개념이 생성
 - 공통된 속성은 일반적인 곳에 있다
 - 하위의 것은 상위의 것을 대신할 수 있다 -> 묵시적 형변환
 - 상위의 것은 하위의 것을 대신할 수 없다 -> 굳이 사용해야 한다면 명시적 형변환 필요

예) 사물 a = new 포유류();   → 가능한 이유: 다형성
     사물 a = new 조류();      → 가능한 이유: 다형성
     코끼리 e = new 생물();   → (X)



2. Encapsulation

1) 정보 은닉
 - 상황에 따라 객체의 정보를 은닉한다
예) 아침에 청년a가 집에서 나오면 정보를 숨긴 채 다닌다
   : 누가 전화번호, 계좌번호를 물어도 자신의 정보를 밝히지 않는다

2) 절차 은닉
 - 절차는 필요하지 않고 결과가 중요하다: 절차를 공개하지 않는다
예) 모 사이트가 리팩토링했는데 사용자는 무엇이 바뀌었는지 모른 채 사이트를 이용한다
   : 기존의 시스템을 수정, 보완

3) 캡슐화를 통해 은닉된 정보는 해당 클래스에서만 변경, 이용할 수 있다

4) 다른 클래스에서 은닉된 정보에 접근하려면 getter 메서드나 setter 메서드를 이용하여 접근, 변경해야 한다

3. Method Syntax 


정적 모델링과 동적 모델링


메서드 구문의 개요
BEAN과 Application class


4. Overloading

 - 사용 목적: 메서드를 다양하게 사용하기 위해
 - overloading 기능을 지원하는 이유: 다형성을 구현하기 위해
 - 같은 이름의 인자값을 가지고 다양한 유형의 호출에 응답

예) 오버로딩 사례
...
 
    public User03(){    // 기본 생성자
 
        System.out.println("Constructor Method");
        name = "홍길동";
        javaLevel = 0;
    }
 
    public User03(String str){    // 생성자 오버로딩
        System.out.println("나는 String을 인자로 받아 name을 초기화하는 생성자");
        name = str;
    }
 
    public User03(int i){    // 생성자 오버로딩
 
        System.out.println("나는 int를 인자로 받아 javaLevel을 초기화하는 생성자");
        javaLevel = i;
    }
 
    public User03(String str, int i){    // 생성자 오버로딩
 
        System.out.println("나는 String, int를 인자로 받아 name, javaLevel을 초기화하는 생성자");
        name = str;
        javaLevel = i;
    }
 
...
 
// main method
 
    public static void main(String[] args){     
 
        System.out.println("================");
 
        User03 user03 = new User03(100);
 
        System.out.println("name: "+user03.getName());
        System.out.println("javaLevel: "+user03.getJavaLevel());
 
        System.out.println("================");
 
        User03 user04 = new User03("이순신"200);
 
        System.out.println("name: "+user04.getName());
        System.out.println("javaLevel: "+user04.getJavaLevel());
    }// end of main
}// end of class
 
 
cs


5. 생성자

생성자 개요


생성자 오버로딩 및 인스턴스 생성시 호출 방식



 - 생성자 = 상태값 설정
 - 생성자는 인스턴스가 생성되면 호출된다

※ 생성자 호출 시 하위 생성자에서 내부적으로 상위 생성자가 먼저 호출됨: super(); 가 생략되어 있음

 - 기본 생성자는 클래스 이름과 동일하고 return type이 없음
 - "객체는 각자 다른 상태를 갖는다"는 OOP의 성질에 따라 생성자 오버로딩 발생: 다양한 인스턴스의 생성을 위한 테크닉
 - 기본 생성자가 아예 없다면 자동으로 생성해주는 기능이 있다

※ 하지만, 생성자가 하나라도 존재한다면 기본 생성자의 생성 책임은 개발자에게 있다
 ∴ 기본 생성자는 만드는 습관을 갖자!