wan-stack
객체 지향 프로그래밍 4대 특성(캡상추다) 본문
객체 지향 프로그래밍(OOP)?
- OOP(Object-Oriented Programming)
- 객체들의 유기적인 협력과 결합으로 파악하고자 하는 컴퓨터 프로그래밍
객체 지향 프로그래밍의 장점
- 객체 지향 설계를 통해 프로그램을 보다 유연하고 변경이 용이하게 만들 수 있는 점.
- 각자의 독립적인 역할을 가지기에 코드의 변경을 최소화하고 유지보수하는데 유리하다.
- 코드의 재사용을 통해 반복적인 코드를 최소화하고, 코드를 최대한 간결하게 표현할 수 있다.
- 인간 친화적이고 직관적인 코드를 작성하기에 용이하다.
객체 지향의 4대 특성
1. 캡슐화(정보은닉)
서로 연관있는 속성과 기능을 하나의 캡슐로 만들어
데이터를 외부로부터 보호하는 것
객체 간의 결합도를 감소시키고, 응집도를 강화하는데 기여
즉, 유지보수의 용이성이 좋아지는 효과를 기대할 수 있다.
** 객체 간 결합도 : 객체 간에 의존하는 정도
** 객체의 응집도 : 한 객체의 자율성, 특정 역할에 대한 독립적인 책임을 의미
1-1. 데이터보호 - 외부로부터 클래스에 정의된 속성과 기능들을 보호
1-2. 데이터은닉 - 내부의 동작은 감추고 외부에는 필요한 부분만 노출
2가지 방법 (접근제어자, getter/setter)
접근제어자
public : 모든 클래스 접근이 가능하다, 접근 제약이 없다.
default : 접근 제어자를 별도로 설정하지 않으면 default 접근 제어자가 되고, 해당 패키지에서만 접근 가능
protected : 접근 제어자가 protected로 설정되었으면 같은 패키지내의 클래스 또는 해당 클래스를
상속받은 외부 패키지의 클래스에서 접근이 가능
private : 같은 클래스에서만 접근이 가능
getter/setter 메서드
속성들을 private으로 선언하고, getter/setter 메서드의 접근 제어자만 public으로 열어둔다.
2. 상속(재사용 + 확장)
상위 클래스의 특성을 하위 클래스에서 상속(재사용, 특성 상속)하고
추가로 필요한 특성을 더하는 확장의 의미
코드의 재사용성을 높일 수 있다.
- 객체 지향의 상속은 상위 클래스의 특성을 재사용하는 것이다.
- 객체 지향의 상속은 상위 클래스의 특성을 확장하는 것이다.
3. 추상화 : 모델링
추상화란 구체적인 것을 분해해서 관심영역(애플리케이션의 경계, Application Boundary)에 있는
특성만 가지고 재조합 하는 것 = 모델링
모델링은 실제 사물을 정확하게 복제하는 것이 아니라 목적에 맞게 관심 있는 특성만을 추출해서
표현하는 것이다. 즉, 모델은 추상화를 통해서 실제 사물을 단순하게 묘사하는 것
추상 클래스와 인터페이스가 있다.
- 추상 클래스 : 추상 메서드를 하나 이상 가지고 있는 것이 추상 클래스
일반 메서드 또는 멤버 변수를 구성원으로 가지고 있다. 상속을 강제하기 위한 방법
하위 클래스들의 공통점들을 모아 추상화하여 만든 클래스
- 인터페이스 : 모든 메서드가 구현된 부분이 없는 추상 메서드 형태로 이루어진 클래스, 다중 상속이 가능하다
*** 인터페이스 : 정의된 메서드를 각 클래스의 목적에 맞게 기능을 구현하는 느낌
*** 추상클래스 : 자신의 기능들을 하위 클래스로 확장 시키는 느낌
4. 다형성 : 사용 편의성
어떤 객체의 속성이나 기능이 상황에 따라 여러 형태로 변할 수 있다는 것을 의미!
다형성을 통해 개발 유연성, 코드 재사용성을 제고 시킬 수 있다.
객체 지향에서 다형성은 오버라이딩과 오버로딩이 있다.
오버라이딩 : 같은 메서드 이름, 같은 인자 목록으로 상위 클래스의 메서드를 정의 (재정의)
오버로딩 : 같은 메서드 이름, 다른 인자 목록으로 다수의 메서드를 중복 정의 (중복정의)
참고,
추상클래스와 인터페이스의 공통점과 차이점
추상클래스와 인터페이스를 알아보기 앞서 인터페이스와 추상클래스가 언제, 그리고 왜 쓰이는지 그 목적성에 대해서 분명히 알고 개념을 익힌다면 더욱 공통점과 차이점을 명확하게 할 수 있
blog.metafor.kr
☕ 인터페이스 vs 추상클래스 용도 차이점 - 완벽 이해
인터페이스 vs 추상클래스 비교 이 글을 찾아보는 독자분들은 아마도 이미 인터페이스와 추상클래스 개념을 학습한 뒤에 이 둘에 대하여 차이의 모호함 때문에 방문 했겠지만, 그래도 다시한번
inpa.tistory.com
https://myjamong.tistory.com/150
[JAVA] 추상클래스 VS 인터페이스 왜 사용할까? 차이점, 예제로 확인 :: 마이자몽
추상클래스 인터페이스 왜... 사용할까? 우리는 추상클래스와 인터페이스에 대해서 알고 있냐고 누가 물어본다면 알고 있다고 대답을 하고있습니다. 그런데 이론적인 내용 말고 정작 "왜 사용하
myjamong.tistory.com