2022-07-18, 추가 22-09-15
Object Oriented Programming
객체(Object)란? 주체가 아닌, 주체가 활용하는 것이다.
객체는 언제든 교체해도 상관 없고, 기본 프로세스가 변경되지 않는다.
현실의 객체가 갖는 속성과 기능은 추상화(abstraction) 되어 클래스에 정의된다!
클래스는 구체화 되어 프로그램의 객체(instace, object)가 된다.
클래스(data type): 객체를 정의해 놓은 것. 객체의 설계도, 틀
객체(메모리에 생성된 데이터): 클래스를 데이터 타입으로 메모리에 생성된 것
- simplification(간략화) <class, data> 클래스 껍질 만들기, 데이터와 메서드를 생성한다.
- abstraction (method) = 누가 어떤 식으로 만들었는 지는 몰라도 활용가능하면 사용할 수 있다. API 사용!
- 모든 자손 클래스에서 사용 하는 메서드는 공통 모듈로 만들자!
- 부모클래스에서는 필요가 없는 메서드임. 하지만 자손클래스의 메서드를 가져오기 위해서는 부모클래스에서 선언 되어있어야함.
→ 추상클래스(abstract)를 만들어서 구현부 없이 선언부만 남김!모든 자식들이 사용하고, 자식 들이 다른 기능이 필요할 때 필요!
다형성의 정의 : 상속 관계에 있을 때 조상 클래스의 타입으로 자식 클래스 객체를 레퍼런스(참조)할 수 있다. 자식이 생성되면 부모는 자식의 객체를 참조할 수 있다.
1. Overriding : 자식클래스에서 같은 메소드를 재정의
- 부모 타입으로 자식 생성 V v1 = new A();
- 부모 타입으로 자식 참조
A a2 = new A(); V v1 = a2;- 부모 메소드에 없어도 자식에 있으면 자식것을 호출해서 사용
//Overriding은 static X //부모 타입으로 자식으로 쓸 수 있음 (Polymorphism) //자식의 종류에 따라 다양한 형태로 변환. //부모의 method가 자식의 형태에 따라 다양한 형태로 변함 V v1 = new A(); V v2 = new B(); V v3 = new C();
개발자의 실수를 방지하기위해 @override 표시
2. Overloading : 같은 이름의 메서드의 인자의 수나 자료형이 다른 경우
- ex) System.out.println()을 통해 여러개의 데이터 타입을 전부 출력해볼 수 있다. -> 시간 단축에 필수
하위 데이터타입에서 상위 데이터타입으로 변환은 묵시적 캐스팅 이라한다.
반대로 상위에서 하위로의 변환은 명시적캐스팅 이라고하고 변환되는 형태를 붙여줘야한다.
Vehicle vehicle = new Car();
Car car = (car)vehicle; //상위 데이터 타입인 Vehicle에서 Car로 변환
- 부모의 것 사용 extends
- 아버지의 생성자를 먼저!! 초기화
- 생성자는 안만들면 default로 설정됨.
데이터 보안, 데이터를 한번에 담아서 줌
- member를 숨김. (private으로 숨기고 public으로 보여주기만 함)
- package(java.lang을 빼고는 전부 import 해야함)
- 동시에 같은 이름이 있으면 최종 위치(자식)에서 멤버 찾는다.
→ 자식쪽의 데이터를 사용하려면 null, 0일 수 있다. 자식에서 부모와 같은 멤버 변수를 쓰지 말자!
접근 제한자 : public, protected, (default = package), private
final
- 용도
- final class : 확장 불가, 상속 금지 → 오버라이드 방지 (이미 완벽해서 수정필요X)
- 이미 완벽한 클래스들 (String, Math, ~)
- final method : 더 이상 재정의 할 수 없음. overriding 금지! (자식이 재정의 불가!)
- final variable : 더 이상 값을 바꿀 수 없음. 상수화
- 실수를 안하게 도와주는 것! (확장을 막는 개념이 아님)
- 오브젝트에 어떤 역할이 있는 지 설계 (기능)
- 최상의 추상화 단계: 일반 메서드는 모두 abstract 형태이다.
- extends를 이용해 상속
- 다중상속 가능, implements 사용, 인스턴스화 불가능