운영체제
소프트웨어
자료구조론
생성자 메소드는 초기화
- 상속(Inheritance)
자바는 단일 상속이다.
자식클래스가 부모클래스에게 선택해 물려받는 것 (extends)사용
-부모 클래스를 재사용해 자식 클래스 빨리 개발 가능
-반복된 코드 중복 줄임
-유지 보수 편리성 제공
-객체 다형성 구현 가능
상속 대상 제한
-부모 클래스의 private접근 불가 필드와 메소드는 제외
-부모 클래스의 있는 생성자 메소드는 상속이 안됨!
고로 초기화 부모 클래스에서 초기화 된 걸 가지고 와야함 super를 사용하면 된다.
현실에서 상속은 부모가 자식에게 물려주는 행위지만
프로그램에서는 부모 클래스를 상위 클래스로 부르고 자식 클래스를 하위 클래스라고 부른다.
상위 클래스에서 상속을 해주면 하위 클래스에서 원하는대로 골라 사용할 수 있다.
상속 관계에서는 super와 오버라이드 인스턴스 오버등이 있다.
오버라이딩 : 재정의
클래스 생성 순서
상위 클래스(부모) 객체생성 -> 하위 클래스(자식)
상위 생성자 호출(초기화)
상위 클래스에서 초기화를 한다.
그럼 하위클래스에서 super로 부른다.
super();
매개 값과 동일한 타입 개수 순서 맞는 부모 생성자 호출
타입의 다형성
- 같은타입이지만 실행 결과가 다향한 객체를 이용할 수 있는 성질
자동 타입 변환
- 자식은 부모의 특징과 기능을 상속받기 떄문에 동일하게 취급할 수 있다.
필드의 다형성
-필드의 값을 다양화함으로써 실행 결과가 다르게 나오도록 하는데 필드이 타입은
변함이 없지만 실행 도중에 객체를 필드로 저장하느냐에 따라 결과가 달라질 수 있다.
강제 타입 변환(Casting)
자식 클래스 변수 = (자식클래스) 부모클래스타입;
객체 타입 확인(instanceof)
- 객체 타입을 비교 연산자
- 형변환 가능 여부 확인 true / false 반환
- 전혀 연관성이 없는 타입과는 비교 불가(문법 오류)
- 상속 관계가 아니면 비교 자체가 불가함
- 다형성은 상속 관계에서만 성립하기 때문에 객체 타입 비교도 다형성이 성립된 상태에서만 의미 있음
추상클래스(abstract calss)
실체 클래스들의 공통되는 필드와 메소드 정의한 클래스
추상 클래스는 실체 클래스의 부모 클래스 역활(단독 객체 X)
추상클래스의 용도
- 실체 클래스들의 공통된 필드와 메소드의 이름을 통일할 때]
실체 클래스 + 구현되지 않은 메소드인 추상 메소드가 들어와야한다. {}괄호가 없으면 추상메소드다.
상속 받는 메소드에서 오버라이딩한다.
- 실체 클래스를 작성할 떄 시간 절약
추상 메소드와 오버라이딩(재정의)
메소드 이름은 동일하지만, 실행 내용이 실체 클래스마다 다른 메소드
ex : 동물은 소리를 낸다. 하지만 동물들의 소리는 제각기 다르다
-구현 방법-
추상 클래스에는 메소드의 선언부만 작성(추상메소드)
실체 클래스에서 메소드의 실행 내용 작성(오버라이딩(Overriding))
인터페이스
개발코드를 수정하지 않고 인터페이스를 통해 개발코드를 쉽게 변경하기 위해 사용한다.
인터페이스는 개발 코드와 객체가 서로하는 접점 역활을 한다.
인터페이스와 추상 클래스는 객체를 생성할 수 없다.
타입변환과 다형성
하나의 타입에 여러 가지 객체를 대입해 다양한 실행 결과를 얻는 것
기술
자동 타입 변환
오버라이딩
효과
다양한 실행 결과를 얻을 수 있음
객체를 부품화시킬 수 있어 유지보수 용이 (메소드의 매개변수로 사용)
매개 변수의 다형성
자동 타입 변환은 필드의 값을 대입할 때에도 발생하지만, 주로 메소드를 호출할 떄 발생
부모 타입으로 선언하고 호출할 때에는 자식 객체를 대입한다.
강제 타입 변환은 자동 타입 변환 후 구현 클래스 타입으로 변환
행 변환 해야한다.
강제타입 변환 하는법
Vehicle v2 = new Bus();
v2.run();
Bus bus2 = (Bus)v2;
인터페이스간의 상속 발생시
전부 상속 해야야한다.
추상클래스 VS 인터페이스 공통점
실체가 없으므로 반드시 구현해야한다.
추상클래스 VS 인터페이스 차이점
추상클래스와 인터페이스의 공통점은 추상메서드를 사용할 수 있다는 것입니다.
그럼 왜 굳이 2가지로 나눠서 사용할까요?
추상클래스와 인터페이스의 기능들을 살펴보면
추상클래스가 인터페이스의 역할을 다 할 수 있는데 왜 굳이 인터페이스라는게 있는 걸까요?
이론적인 차이점을 다 제외하고 두개로 나눠서 사용하는 가장 큰 차이점은 사용용도라고 생각합니다.
추상클래스는 IS - A "~이다".
인터페이스는 HAS - A "~을 할 수 있는".
이렇게 구분하는 이유는 다중상속의 가능 여부에 따라 용도를 정한 것 같습니다.
중첩 클래스와 중첩 인터페이스
클래스들은 상호작용을 한다.
클래스가 여러 클래스와 관계를 맺으면 독립적으로 선언하는게 좋으나 특정 클래스와 관계를 맺을경우
관계 클래스를 클래스 내부에 선언하는게 좋다.
중첩 클래스
멤버 클래스 : 멤버 클래스는 클래스나 객체가 사용중이면 언제든지 재사용가능
로컬 클래스 : 로컬 클래스는 메소드 실행시만 사용되고 실행되면 소멸한다.
인스턴스 멤버 클래스 정의
인스턴스 멤버 클래스는 static 키워드 없이 선언된 클래스를 말한다.
인스턴스 멤버 클래스는 인스턴스 필드와 메소드 선언이 가능하고 정적 필드와 메소드를 선언할 수 없다.
'프로그래밍 공부' 카테고리의 다른 글
2022년 5월 13일 프로그래밍 SingleTon/ArrayList/HashSet/Map 컬렉션 (0) | 2022.05.13 |
---|---|
2022년 5월 12일 프로그래밍 익명 객체 / 컬렉션 프레임 워크 (0) | 2022.05.12 |
2022년 5월 9일 프로그래밍 JAVA 상속/ SQL 오라클 현재 날짜 출력 (0) | 2022.05.09 |
2022년 5월 6일 Java 객체 지향 (0) | 2022.05.06 |
2022년 5월 4일 JAVA (배열,클래스) (0) | 2022.05.04 |