# OOP
은닉화, 상속, 다형성, 추상화
cf) 개발방법론 : scrum, CBD, agile, waterfall, ...
# 상속 - 어떤 Class 설계할 때 마다 A~Z 구현, But 상속이 있다면 손쉬운 확장
공통의 특징을 상위 class로 올리고 필요한 class에서 상속받기
(네트워크에서는 상속의 개념을 활용하지 않는다)
지역변수 / 전역변수
클래스 변수 / 멤버 변수
# 상속 - 객체의 다형성, 메서드의 다형성, 매개변수의 다형성
(byte, short, int, long / float, double / char / String / boolean)
java 와 같은 컴파일 언어는 타입점검이 중요!
(정수형 상수는 int, 실수형 상수는 double) ex) 12.235f
int형은 char형과 형 변환 가능
포함을 기준으로 비교한다면 자식이 더 크다(더 많이 가지고 있으므로)
타입을 기준으로 비교한다면 부모가 더 크다(캐스팅 방향을 생각)
객체의 다형성 : 하나의 타입으로 여러 개의 sub type 객체를 생성할 수 있는 것
다형성은 상속을 통해 이해하기..!
# 다형성 - 배열
데이터를 추출해서 프론트단 까지 추출하는 것이 필요
이를 어떤 방식으로 전달? > 배열(Array)
가장 중요한 것은 단일 데이터 형식 담는다
여기서 다형성 접목!
public class ObjectAryMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
PersonVO [] perAry = new PersonVO[10];
//
StudentVO stu = new StudentVO("윤신웅", 27, 'm', "1994");
TeacherVO tea = new TeacherVO("윤신웅2", 27, 'm', "자바");
EmployeeVO emp = new EmployeeVO("윤신웅3", 27, 'm', "개발");
//
perAry[0] = stu ; perAry[1] = tea; perAry[2] = emp;
}
}
만약 다형성(Overriding)이 없다면
import com.sinc.intern.oop.model.vo.PersonVO;
import com.sinc.intern.oop.sub.model.VO.EmployeeVO;
import com.sinc.intern.oop.sub.model.VO.StudentVO;
import com.sinc.intern.oop.sub.model.VO.TeacherVO;
public class ObjectAryMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
PersonVO [] perAry = new PersonVO[10];
//
StudentVO stu = new StudentVO("윤신웅", 27, 'm', "1994");
TeacherVO tea = new TeacherVO("윤신웅2", 27, 'm', "자바");
EmployeeVO emp = new EmployeeVO("윤신웅3", 27, 'm', "개발");
//
perAry[0] = stu ; perAry[1] = tea; perAry[2] = emp;
printAry(perAry);
}
public static void printAry(PersonVO [] ary) {
for(int idx = 0 ; idx < ary.length ; idx ++) {
PersonVO obj = ary[idx] ;
if(obj instanceof StudentVO) {
((StudentVO)obj).stuInfo();
}
if(obj instanceof TeacherVO) {
((TeacherVO)obj).teaInfo();
}
if(obj instanceof StudentVO) {
((EmployeeVO)obj).empInfo();
}
}
}
}
instanceof 연산을 통해 instance 별로 확인 후 메서드 호출(비효율)
오버라이딩은 선언부 같아야함(단 접근제어자는 자식 클래스에서 커질 수 있다)
public static void main(String[] args) {
// TODO Auto-generated method stub
PersonVO [] perAry = new PersonVO[10];
//
StudentVO stu = new StudentVO("윤신웅", 27, 'm', "1994");
TeacherVO tea = new TeacherVO("윤신웅2", 27, 'm', "자바");
EmployeeVO emp = new EmployeeVO("윤신웅3", 27, 'm', "개발");
//
perAry[0] = stu ; perAry[1] = tea; perAry[2] = emp;
printAry(perAry);
}
public static void printAry(PersonVO[] ary) {
for(int idx = 0 ; idx < ary.length ; idx++) {
PersonVO obj = ary[idx] ;
if(obj == null)
break;
System.out.println(obj.perInfo());
}
}
}
cf. 메소드의 다형성 = 오버로딩 ?
오버로딩은 상속이 아닌데 상속으로부터 다형성 고려할 수 있나?
# 매개변수의 다형성
매개변수를 형 변환(Casting) 처리
a_method(double d) 를 int 형 변수로 호출 가능(자동 형 변환)
그러나 기본형 캐스팅 보다는 객체형 캐스팅이 유의미하다
# 추상화
interface > 상수(final), 추상 메서드 (단, 생성자를 가질 수 없다)
1) 강제성을 부여하기 위해(표준)
2) 객체 타입을 숨길 수 있는 은닉화를 위해
3) 객체의 다형성을 지향하기 위해
인터페이스 추상메서드 abstract
implements를 통해 인터페이스 구현
cf. 추상 클래스를 통한 문제점
Animal(인터페이스 fly를 담고 있는 추상클래스) -> Superman, Bird 상속 중에 Tiger 추가해야함
그러면 Tiger도 Animal 상속하게 되면 fly를 구현해야 하는 모순 발생
따라서 인터페이스를 통한 다형성 구현!
'Archived(CSE Programming) > Java' 카테고리의 다른 글
Java_예외처리 (0) | 2020.01.17 |
---|---|
Java_다형성과 컬렉션 (0) | 2020.01.16 |
Java_자바의 기본 (0) | 2020.01.13 |
Java 깊은 복사와 얕은 복사 (2) | 2019.11.03 |
Java 마커 인터페이스 (0) | 2019.11.03 |