객체 프로그래밍의 객체란 뭐야?
객체는 속성과 행동으로 이루어진 존재라고 보면 된다.
이렇게 설명하면 이해가 잘 되지 않을 수 있기 때문에 예를 들어 설명해보겠습니다.
ex) 인스타그램
속성: 이메일 주소, 비밀번호, 아이디, 친구 목록.....
행동: 팔로잉...
그렇다면 객체 지향 프로그래밍이란 뭐야??
=> 객체 지향 프로그래밍은 프로그램을 여러 개의 독립된 객체들과 그 객체들 간의 상호작용으로
파악하는 프로그래밍 접근법이라고 볼 수 있습니다.
이것도 예시로 설명해보겠습니다.
한 번쯤은 다들 총 게임을 해보셨을 거라고 생각하고 총게임을 예시로 들어볼게요.
ex) 총게임
#총 게임 에는 게임 캐릭터 객체, 총 객체, 총알 객체 등이 있습니다. #여러 개의 독립된 객체
그렇다면
게임 캐릭터 객체 속성 : ID, 현재 사용 중인 총, 체력, 목숨
게임 캐릭터 객체 행동 : 총을 발사한다 , 체력이 0이 되면 죽는다
총 객체 속성 : 모델명, 무게, 장전된 총알 개수
총 객체 행동 : 총알을 발사한다
총알 객체 속성 : 공격력
총알 객체 행동 : 총알을 맞은 캐릭터의 체력을 공격력만큼 깎는다
객체 지향 프로그래밍으로 프로그램을 만들려면 어떻게 해야 될까?
1. 프로그램에 어떤 객체들이 필요한지 정한다.
2. 객체들의 속성과 행동을 정한다.
3. 객체들이 서로 어떻게 소통할지 정한다.
* 객체지향적으로 설계를 모델링(Modeling) 이라고도 한다.
* 아래 표는 이해하기 쉽게 설명되어있는 글이 있어서 가져왔으니 참고하시기 바랍니다.
| 절차지향(POP) | 객체지향(OOP) |
영문명 | Procedure Oriented Programming (절차 지향) | Object Oriented Programming(객체지향) |
접근방식 | Top-Down (시스템 동작 방식을 먼저 생각, 그 다음 세부 모델 디자인) |
Bottom-Up (세부 모델 디자인 후 조립) |
구현관점 | 전체적인 기능 동작을 고려 ↓ 각 단계별로 기능을 구현 |
필요한 속성의 객체를 설계 (보안성, 데이터, 함수 등) ↓ 각 객체의 상호작용(절차)을 설계 |
구성 요소 | 함수 | 객체 |
접근제어 | 없음(전부 public) | public, protected, private |
오버로딩, 다형성 | 불가능 | 함수, 생성자, 연산자 등을 오버로딩 가능 |
상속 | 불가능 | 가능(public, protected, private) |
보안성 | 낮음 | 높음 |
데이터 공유 | 모든 함수가 공유 가능 | 객체 간 멤버함수로만 공유 |
friend 함수 | 없음 | C++에 있음 |
가상 클래스, 가상 함수 | 없음 | 상속 개념 아래 존재함 |
예시 언어 | C, Visual Basic, Fortran, Pascal | C++, Java, VB.NET, C#, Python |
장점 | 컴퓨터 눈높이로 구성된 문법 바닥부터 입맛대로 설계하기 좋음 |
인간 눈높이에서 구조 파악하기 좋음 객체 기능 제공하므로 코드 절약 |
단점 | 프로젝트가 커질 시 구조가 복잡해지고 중복 코드를 작성할 수도 있음 |
제공된 객체 기능에서 발생하는 오버헤드를 최적화 할 수 없다면 상대적으로 느려짐 |
용도 | 자원이 한정되어 있거나 바닥부터 설계할 필요가 있는 프로젝트 |
규모가 크고 협업이 잦으며 생산성이 중시되는 프로젝트 |
'객체 지향 프로그래밍 시리즈' 카테고리의 다른 글
정적 메소드(Method) | 객체 지향 프로그래밍 시리즈 005 (0) | 2021.07.21 |
---|---|
SNS 맞팔 하는 코드 | 객체 지향 프로그래밍 시리즈 004 (1) | 2021.07.21 |
인스턴스 메소드 | 객체 지향 프로그래밍 시리즈 003 (0) | 2021.07.21 |
클래스? 인스턴스? | 객체 지향 프로그래밍 시리즈 002 (2) | 2021.07.21 |