-
[Java] 객체지향 프로그래밍이란? (OOP, Object-Oriented Programming)개발 여정/컴퓨터공학 일반 2021. 12. 7. 21:49
객체지향 프로그래밍이란? (OOP, Object-Oriented Programming)
데이터의 묶음인 객체를 유기적으로 처리하는 프로그래밍 방법.
조립식 컴퓨터의 부품을 하나씩 조립하는 것과 같다.
절차지향 프로그래밍(Procedural Programming)과의 차이점
절차지향 프로그래밍은 물 흐르듯 순차적으로 진행되는 처리방식을 일컫는다. 대표적으로 C언어가 있다. 컴퓨터의 처리구조와 유사해 실행속도가 빠른 장점이 있으나, 실행순서가 정해져 있어 코드의 순서가 바뀌면 동일한 결과를 불러올 보장이 없다는 것이 단점이다. 또한 유지보수 및 디버깅이 어렵다는 단점이 있다.
객체지향프로그래밍의 요소
1. 클래스(Class)
- 특정 목적을 위해 데이터(필드)와 메소드를 담는 틀
2. 인스턴스 (Instance)
- 클래스에 정의된 대로 메모리에 할당되어 사용되는 객체
- 꼭 클래스-객체 사이의 단어로 한정해서 사용할 필요는 없으며, 추상적인 개념이 소프트웨어 세계에서 메모리 할당되어 사용될 때 지칭한다.
3. 객체(Object)
- 소프트웨어 세계에 구현할 대상
- 클래스의 인스턴스
4. 메소드(Method)
- 객체의 속성을 사용하는 방법
객체지향프로그래밍의 장점
- 코드의 가독성을 높임
- 프로그램의 변경이 용이
- 프로그램의 개발과 보수를 편하게 함
- 높은 응집력(String Cohension), 약한 결합력(Weak Coupling)
- 응집력(Cohension): 프로그램의 각 요소들이 공통적인 목적을 위해 기능하는 것
- 결합력(Coupling): 프로그램의 요소가 서로 의존적인 것
- OOP는 클래스 하나에 공통 목적을 위해 데이터들을 활용하므로 응집력을 강화하고, 클래스를 각각 디자인함으로써 결합력이 약해진다.
객체지향프로그래밍의 특징
1. 추상화
- 클래스를 설계하는 것 (공통의 속성이나 기능을 묶어 이름을 붙이는 것)
2. 캡슐화
- 접근제어자(private)를 통한 정보은닉
- 캡슐화의 장점 - 코드를 수정할 때 영향 범위를 예측하기 쉬움 (정보의 제어 권한이 있는 곳을 알기 때문에)
3. 상속성
- 부모클래스의 속성과 기능을 자식클래스에서 그대로 사용할 수 있는 것
- 자식클래스에서 부모클래스의 메소드를 자기 클래스에 맞게 수정할 수도 있음
- 다중상속은 불가능 (클래스의 상속관계에 혼란을 줄 수 있기 때문에 하나의 클래스만 상속받을 수 있음, 대신 인터페이스 사용 가능)
4. 다형성
- 하나의 변수명, 함수를 상황에 맞게 기능 확장/변경하는 것
- 오버라이딩(Overriding): 부모클래스의 메소드를 parameter만 재정의하여 그대로 사용하는 것
- 오버로딩(Overload): 메소드의 이름만 같고 parameter 타입/개수, 리턴 타입을 다르게 하는 것
References
https://jeong-pro.tistory.com/95
https://sh77113.tistory.com/57
https://gmlwjd9405.github.io/2018/09/17/class-object-instance.html
'개발 여정 > 컴퓨터공학 일반' 카테고리의 다른 글
프록시 서버 (Proxy Server) (0) 2023.04.14 [자료구조] 단방향 연결 리스트 (Singly Linked Lists) (0) 2022.12.10 [디자인패턴] MVVM 구조란? (0) 2022.09.22 프로그래밍에서 '추상화'란? (0) 2021.12.01