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 메서드를 이용하여 접근, 변경해야 한다
4. Overloading
- 사용 목적: 메서드를 다양하게 사용하기 위해
- 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의 성질에 따라 생성자 오버로딩 발생: 다양한 인스턴스의 생성을 위한 테크닉
- 기본 생성자가 아예 없다면 자동으로 생성해주는 기능이 있다
※ 하지만, 생성자가 하나라도 존재한다면 기본 생성자의 생성 책임은 개발자에게 있다
∴ 기본 생성자는 만드는 습관을 갖자!