doljjang.log
로그인
doljjang.log
로그인
2022/02/19 객체지향 프로그래밍
김석진
·
2022년 2월 19일
팔로우
0
Java
Spring
fastcampus
0
객체 지향 핵심
목록 보기
2/4
다형성과 다형성을 사용하는 이유
다형성(polymorphism)이란?
하나의 코드가 여러 자료형으로 구현되어 실행되는 것
같은 코드에서 여런 다른 실행 결과가 나옴
정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나임
다형성을 잘 활용하면 유연하고 확정성있고, 유지보수가 편리한 프로그램을 만들수 있음
다형성을 사용하는 이유
상속과 메서드 재정의를 활용하여 확정성 있는 프로그램을 만들수 있음
그렇지 않는 경우 많은 if-else if문이 구현되고 코드의 유지보수가 어려워짐
상위클래스에서는 공통적인 부분을 제공하고, 하위클래스에는 각 클래스에 맞는 기능 구현
여러 클래스를 하나의 타입(상위 클래스)으로 핸들링 할 수 있다.
상속은 언제 사용할까?
IS-A 관계(is a relationship: inheritance)
일반적인(general)개념과 구체적인(specific)개념과의 관계
상위 클래스: 하위 클래스보다 일반적인 개념
하위 클래스: 상위 클래스보다 구체적인 개념들이 더해짐
상속은 클래스간의 결합도가 높은 설계
상위 클래스의 수정이 많은 하위 클래스에 영향을 미칠 수 있음
계층구조가 복잡하거 hierarchy가 높으면 좋지 않음
HAS-A관계(composition)
클래스가 다른 클래스를 포함하는 관계
코드 재사용의 가장 일반적인 방법
Library를 구현할 때 ArrayList를 생성하여서용
상속하지 않음
다운캐스팅과 instanceOf
다운캐스팅(downcasting)
업캐스팅된 클래스를 다시 원래 타입으로 형 변환
하위 클래스로의 형 변환은 명시적으로 해야함
Customer vc= new VIPCustomer(); //묵시적
VIPCustomer vCustmoer=(VIPCustomer)vc; //명시적
instanceOf를 이용하여 인스턴스의 형 체크
원래 인스턴스의 형이 맞는지 여부를 체크하는 키워드가 맞으면 true 아니면 false를 반환함
추상클래스의 의미와 구현하는 방법
추상클래스란?
구현 코드 없이 메서드의 선언만 있는 추상 메서드(abstract method)를 포함한 클래스
메서드 선언(declartion):반환 타입,메서드이름,매개변수로 구성
메서드 정의(definition):메서드 구현(implementation)과 동일한 의미 구현부(body)를 가짐
abstract 예약어를 사용
추상 클래스는 new(인스턴스화)할 수 없음
ex) int add(int x,int y); //선언
int add(int x, int y){} //구현부가 있음, 추상 메서드가 아님
추상 클래스를 활용한 템플릿 메서드 패턴
템플릿 메서드
추상 메서드나 구현 된 메서드를 활용하여 코드의 흐름(시나리오)를 정의하는 메서드
final로 선언하여 하위 클래스에서 재정의 할 수 없게함
프레임워크에서 많이 사용되는 설계 패턴
추상 클래스로 선언된 상위 클래스에서 템플릿 메서드를 활용하여 전체적인 흐름을 정의하고 하위 클래스에서 다르게 구현되어야 하는 부분은 추상 메서드로 선언하여 하위 클래스에서 구현하도록 함
템플릿 메서드 예제
이태볼릭 체는 추상메서드
final 예약어
final 변수: 값이 변경될 수 없는 상수
final 메서드 : 하위 클래스에서 재정의 할 수 없는 메서드
final 클래스 : 상속할 수 없는 클래스
구현 코드가 없는 인터페이스
인터페이스(interface)
모든 메서드가 추상 메서드로 선언됨 public abstract
모든 변수는 상수로 선언됨 public static final
인터페이스로 만들어진 코드를 클래스로 구현한다라고 생각하면됨
인터페이스 구현과 형 변환
인터페이스를 구현한 클래스는 인터페이스 형으로 선언한 변수로 형 변환 할 수 있음 ex) Calc calc=new CompleteCalc();
상속에서의 형 변환과 동일한 의미
클래스 상속과 달리 구현코드가 없으므로 여러 인터페이스를 구현할 수 있음
형 변환되는 경우 인터페이스에 선언된 메서드만을 사용가능함
인터페이스를 왜 쓰는가?
인터페이스가 하는일
클래스나 프로그램이 제공하는 기능을 명시적으로 선언
일종의 클라이언트 코드와의 약속이며 클래스나 프로그램이 제공하는 명세
클라이언트 프로그램은 인터페이스에 선언된 메서드 명세만 보고 이를 구현한 클래스를 사용할 수 있음
어떤 객체가 하나의 인터페이스 타입이라는 것은 그 인터페이스가 제공하는 모든 메서드를 구현했다는 의미임
인터페이스를 구현한 다양한 객체를 사용함 -다형성
프로그램에서 인터페이스의 역할과 다형성(dao 구현하기)
인터페이스와 다형성
하나의 인터페이스를 여러 객체가 구현하게 되면 클라이언트 프로그램은 인터페이스의 메서드를 활용하여 여러 객체의 구현을 사용할 수 있음 (다형성)
인터페이스를 활용한 DAO 구현하기
DB에 회원정보를 넣는 dao(data access object)를 여러 DB 제품이 지원될 수 있게 구현함
환경파일(db.properties)에서 database의 종류에 대한 정보를 읽고 그정보에 맞게 dao 인스턴스를 생성하여 실행될 수 있게함
여러 인터페이스 구현하기, 인터페이스의 상속
여러 인터페이스 구현
자바의 인터페이스는 구현 코드가 없으므로 하나의 클래스가 여러 인터페이스는 구현 할 수 있음
디폴트 메서드가 중복 되는 경우는 구현하는 클래스에서 재정의 하여야 함
여러 인터페이스를 구현한 클래스는 인터페이스 타입으로 형 변환 되는 경우 해당 인터페이스에 선언된 메서드만 사용 가능 함
인터페이스의 상속
인터페이스 사이에도 상속을 사용할 수 있음
extends 키워드를 사용
인터페이스를 다중 상속이 가능하고 구현 코드의 상속이 아니므로 타입 상속 이라고 함
클래스 상속과 인터페이스 구현 함께 쓰기
실무에서 프레임워크나 오픈소스와 함께 연동되는 구현을 하게 되면 클래스 상속과 인터페이스의 구현을 같이 사용하는 경우가 많음
책이 순서대로 대여가되는 도서관구현
책을 보관하는 자료 구조가 Selef에 구현됨
Queue 인터페이스를 구현함
Shelf 클래스를 상속 받고 Queue를 구현한다.
김석진
주니어 개발자 되고싶어요
팔로우
이전 포스트
2022/02/19 객체 지향 핵심
다음 포스트
2022/02/20 자바의 유횽한 클래스들
0개의 댓글
댓글 작성