wan-stack

객체 지향 프로그래밍 4대 특성(캡상추다) 본문

카테고리 없음

객체 지향 프로그래밍 4대 특성(캡상추다)

wan-stack 2023. 12. 7. 14:35

객체 지향 프로그래밍(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. 다형성 : 사용 편의성

 어떤 객체의 속성이나 기능이 상황에 따라 여러 형태로 변할 수 있다는 것을 의미!

 다형성을 통해 개발 유연성, 코드 재사용성을 제고 시킬 수 있다.

 객체 지향에서 다형성은 오버라이딩과 오버로딩이 있다.

 

 오버라이딩 : 같은 메서드 이름, 같은 인자 목록으로 상위 클래스의 메서드를 정의 (재정의)

 오버로딩 : 같은 메서드 이름, 다른 인자 목록으로 다수의 메서드를 중복 정의 (중복정의)

 

 

참고, 

https://blog.metafor.kr/148

 

추상클래스와 인터페이스의 공통점과 차이점

추상클래스와 인터페이스를 알아보기 앞서 인터페이스와 추상클래스가 언제, 그리고 왜 쓰이는지 그 목적성에 대해서 분명히 알고 개념을 익힌다면 더욱 공통점과 차이점을 명확하게 할 수 있

blog.metafor.kr

https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4-vs-%EC%B6%94%EC%83%81%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EC%99%84%EB%B2%BD-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

 

☕ 인터페이스 vs 추상클래스 용도 차이점 - 완벽 이해

인터페이스 vs 추상클래스 비교 이 글을 찾아보는 독자분들은 아마도 이미 인터페이스와 추상클래스 개념을 학습한 뒤에 이 둘에 대하여 차이의 모호함 때문에 방문 했겠지만, 그래도 다시한번

inpa.tistory.com

https://myjamong.tistory.com/150

 

[JAVA] 추상클래스 VS 인터페이스 왜 사용할까? 차이점, 예제로 확인 :: 마이자몽

추상클래스 인터페이스 왜... 사용할까? 우리는 추상클래스와 인터페이스에 대해서 알고 있냐고 누가 물어본다면 알고 있다고 대답을 하고있습니다. 그런데 이론적인 내용 말고 정작 "왜 사용하

myjamong.tistory.com