객체지향프로그래밍의 특성
a) 추상화
ex) 자동차를 코딩해줘.
사람마다 생각하는게 다를 수 있다. (같은 차를 만들더라도 디테일한 포인트 요소들을 다르게 생각할 수 있다)
즉, 자동차를 코딩 해달라 했는데, OUTPUT이 전혀 다르게 나올 수 있다.
어떻게, 정의하냐에따라, 서로 다른 OUTPUT이 생성됨을 알 수 있다.
따라서 설계가 매우 매우 중요하다 !
1) 스포츠카 : 속도, 브레이크 제동력()
2) 버스 : 탑승 인원, 요금 정산()
3) 차 : 주유 상태 출력(), 벨트(), 네비게이션()
b) 캡슐화
(모듈화, 컴포넌트화)
ex) 병원에 가서 약을 받았을 때 약들을 생각해보자.
약의 내부 구성 성분을 (정확히) 몰라도, 약의 효과를 알면 우리는 그냥 먹는다.
약사에게 약의 구성 성분을 물어보지 않는다. (어차피 물어봐도 모른다)
즉, 내부 로직 코드를 정확히 몰라도,
INPUT / OUTPUT / 기능 / 활용하는 상황 등을 알면 그냥 쓴다 !
// 기존에 코드들을 분석하여 '모듈화' 된 코드들을 가져다가 쓸 수 있다 !
이 경우, 이미 완성된 코드들을 가져다가 쓰기에 다음과 같은 이점을 가지게 된다.
오류의 파급효과가 줄어든다.
개발 시간 단축
개발 비용 절감
이익 증가
유지 보수 용이
c) 상속
어떤 객체를 만들 때 필수적으로 필요한 상위 클래스를 가져다 쓰는 것을 의미 한다.
ex) 동물의숲
주민이라는 상위 클래스가 있고
그 밑에 주민의 종류는 강아지 타입, 고양이 타입, 하마 타입 등이 있다.
강아지나 고양이를 만들때 공통 부분(상위, 부모 클래스) 을 가져다 쓰는 것이다.
결론 !
부모(상위) 클래스에서 미리 공통 부분을 코딩 해놓고,
자식(하위) 클래스에서 '상속' 받아 세부적인 부분을 구현 한다 !
결국,
오류의 파급효과가 줄어든다.
개발 시간 단축
개발 비용 절감
이익 증가
유지 보수 용이
※ 캡슐화 와의 차이점
캡슐화 : 포함관계 X
상속 : 포함관계 O // 따라서 상속은 "설계" 단계에서 집중적으로 고민 해야 하는 부분이라고 할 수 있겠다.
d) 다형성
★ "함수에게 주어(주체)가 생겨서" 발생하는 현상 이다.
★ 곱씹어보기 ★
함수와 메서드의 차이
함수 : 일반적인 프로그래밍 언어에서 흔히 만들 수 있다.
주어가 존재 하지 않는다.
(= 객체가 존재 하지 않는다)
메서드 : 객체지향언어 에서만 작성이 가능 하다.
주어가 존재 한다.
(우리가 기존에 사용하는 함수에 주어를 주는것이다)
함수를 실행 시키는 주어(주체) == 객체
객체가 실행하는 함수 => 메서드
결론
다형성 : 같은 함수를 실행시켜도, 주어(주체)에 따라 다른 기능이 실행되는 현상 이다.
ex1)
강아지.울음소리(); -> 멍멍
고양이.울음소리(); -> 야옹
ex2)
저글링.공격(); -> 5
질럿.공격(); -> 8x2
글로는 이해하기 추상적이니, 코드를 보며 이해하도록 하자.
'Java (국비) > Java 이론' 카테고리의 다른 글
next() 그리고 nextLine() 의 차이 (0) | 2023.05.13 |
---|---|
Java (0) | 2023.05.11 |
함수 간단 정리 (0) | 2023.05.09 |
Flag 알고리즘 (2) | 2023.05.06 |
최대값, 최소값 알고리즘 (0) | 2023.05.06 |