일상기록
Java - OOP 본문
Java OOP 정리
1. 은닉성(캡슐화)
- private : getter, setter ex) get()호출시 암호화가 필요한경우가 생길경우 메소드안에서 수정 (보안성)
- protected : (같은 Package, Superclass(상위클래스), Subclass(하위클래스)) 상위클래스(부모)가 하위클래스(자식)에게만 공유하고싶을 경우
- public : 어디서든
2. 상속
- 유전의 개념으로 생각하면 쉽다. 부모 <- 자식 (부모가 사람이면 자식도 사람) DNA
- 다중상속이 불가하다 Dog, Cat 클래스에 같은 메소드 이름의 eat()가 있다면 Dog, Cat를 상속받은 Dokity에서 eat()은 누구의 eat()인가?(C++에서는 지원한다.)이러한 문제를 인터페이로 해결한다.
- eat()메소드를 인터페이로 분리해서 구현해준다. 인터페이스는 다중 구현이 가능하다.
- 자바스크립트에서는 prototype
- 하위클래스(자식)가 가진 특성을 상위클래스(부모)는 가지고 있지 않다.
- 화살표 방향은 먼저 존재한 쪽으로 향한다.
@Getter
@Setter
public class Sample {
private int age;
class Person extends Sample{
private String name;
@Override
public void setAge(int age) {
// TODO Auto-generated method stub
super.setAge(age);
this.name = "홍길동";
}
@Override
public int getAge() {
// TODO Auto-generated method stub
return super.getAge();
}
}
}
- 위의 코드는 Person <- Sample 이다.
3. 다형성
- Animal을 상속받은 Dog, Cat이 있고 Dog를 상속받은 진돗개가 있을경우 상속의 단점은 진돗개 안에 있는 메소드가 어디서 존재하는지 모른다. 소스를 열어봐야 알수있다.(상속이 깊어지면 분석이 힘들어진다.)
- interface로 implemente나 class로 extends 해야한다.
- interface는 상속의 개념보단 장착 (물려받는다 x, 추가한다 )
- 하위클래스(자식)은 상위클래스(부모)로 형변환이 자유롭지만(up casting, auto casting) 상위클래스(부모)는 하위클래스(자식)로 형변환이 필요하다 (down casting)
public class A {
String parents;
class B extends A{
String child;
}
public void main(String[] args) {
A a = new A();
a.parents = "";
B b = new B();
b.child = "";
a = b;
b = (B) a;
}
}
4. 추상화
- 메소드 선언부만 존재 하는 추상클래스, 인터페이스가 있으며 추상클래스는 abstract class, abstract 메소드 라고 명시해주고 사용한다.
- 추상클래스, 인터페이스는 상속(구현해주는 구현체)가 필요하다.
- 추상클래스 : 추상메소드 하나 이상을 가진 클래스로 변수, 메소드를 포함하고 있다.
- 인터페이스 : 추상메소드 하나 이상만 가지고 있다.
실제 DB연결을 처음 배우면 JDBC로 class.forName("oracle.jdbc.driver.OracleDriver")로 클래스를 JVM에 로드하게 된다.(다른 DB도 마찬가지)
JDBC안에 인터페이스는 Statment, PreparedStatememt, Resultset, Connection, CallableStatement가 있고 개발자가 사용하는 DB에 따라 구현해서 사용하게된다. oracle로 사용하다가 MySQL로 변경시 DB Connection 부분만 수정해서 사용하게 된다.
'Java' 카테고리의 다른 글
Java - 제네릭 타입의 형변환 (0) | 2023.04.18 |
---|---|
Java - 제네릭 메소드 (0) | 2023.04.18 |
Java - 와일드 카드 (0) | 2023.04.17 |
Java - 제네릭(Generic) (0) | 2023.04.17 |
String과 StringBuffer/StringBuilder (0) | 2023.04.13 |