티스토리 뷰
객체지향 프로그래밍이란?
Object-Oriented Programming, OOP
프로그래밍에서 필요한 데이터를 추상화 시켜, 상태와 행위를 가진 객체로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법
💡
간단히 말하면,
실제 세계를 모델링하여 소프트웨어를 개발하는 방법!
데이터와 절차를 하나의 덩어리로 묶어서 생각하게 된다.
컴퓨터 부품을 하나씩 사다가 컴퓨터를 조립하는 것과 같은 방법이다
클래스
- 속성과 행위를 변수와 메서드로 정의한 것
인스턴스(객체)
- 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것으로 실제 프로그램에서 사용되는 데이터
객체 지향 프로그래밍에서 추상화(자료의 추상화)
- 클래스를 설계하는 것 자체를 의미
- 공통의 속성이나 기능을 묶어 이름을 붙이는 것
객체 지향의 3대 특성
- 캡슐화
- 목적
- 코드를 재수정 없이 재활용하는 것
- 접근 제어자를 통한 정보 은닉
- 데이터 구조와 데이터를 다루는 방법들을 결합시켜 묶는 것(변수와 함수를 하나로 묶는 것을 뜻함)
- 낮은 결합도를 유지할 수 있도록 설계하는 것
- 속성과 기능을 정의하는 변수와 메소드를 클래스라는 캡슐에 넣어서 분류하는 것으로 재활용이 원활하다는 장점이 있고 캡슐화를 통해서 정보은닉을 활용할 수도 있다.
- 목적
- 상속
- 클래스의 속성과 행위를 하위 클래스에 물려주거나 하위 클래스가 상위 클래스의 속성과 행위를 물려받는 것을 말한다.
- 새로운 클래스가 기존의 클래스의 데이터와 연산을 이용할 수 있게 하는 기능
- 장점
- 재사용으로 인한 코드가 줄어든다.
- 범용적인 사용이 가능하다.
- 자료와 메서드의 자유로운 사용 및 추가가 가능하다.
- 단점
- 상위 클래스의 변경이 어려워진다.
- 불필요한 클래스가 증가할 수 있다.
- 상속이 잘못 사용될 수 있다.
- 다형성
- 하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석 될 수 있는 것
- 어떠한 요소에 여러 개념을 넣어 놓은 것
- 객체 지향 프로그래밍은 하나의 클래스 내부에 같은 이름의 행위를 여러개 정의하거나 상위 클래스의 행위를 하위 클래스에서 재정의하여 사용할 수 있기 때문에 다형성이라는 특징을 갖게 된다.
- 오버라이딩
- 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용하는 것
- 오버로딩
- 같은 이름의 메서드가 인자의 개수나 자료형에 따라 다른 기능을 하는 것
장점
- 코드의 재활용성이 높음
- 코딩이 절차지향보다 간편함
- 디버깅이 쉬움
단점
- 처리속도가 절차지향보다 느림
- 설계에 많은 시간소요가 들어감
절차지향 프로그래밍이란?
Procedure Oriented Programming, POP
물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시 되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법이다.
✖️ 대표적인 언어 C언어
🎯 객체지향의 탄생 배경
옛날에는 하드웨어와 소프트웨어의 개발속도차이가 크지 않았다.
하지만 하드웨어의 빠른 발전을 통해 컴퓨팅 환경은 급속도로 증가했지만 소프트웨어 개발 시간이 따라가지 못하게 되고 이런 상황에 소프트웨어의 개발시간을 단축하되 하드웨어에 기본적인 사양을 잡아먹어도 더 이상 큰 단점이 아니기에 모듈화, 캡슐화해서 개념적으로 접근하는 형태를 갖는 객체지향 프로그래밍이 탄생했다.
장점
- 컴퓨터의 처리구조와 유사해 실행속도가 빠름
단점
- 유지보수가 어려움
- 실행 순서가 정해져 있으므로 코드의 순서가 바뀌면 동일한 결과를 보장하기 어려움
- 디버깅이 어려움
객체지향 vs 절차지향
절차지향의 반대는 객체지향이 아니고, 객체지향의 반대는 절차지향이 아니다.
절차지향은
순차적으로 실행에 초점이 되어 있고
객체지향은
객체간의 관계/조직에 초점을 두고 있다.
❓❓❓
그렇다면 객체지향은 절차적으로 실행되지 않나?
객체지향 역시 절차지향과 동일한 순서로 실행된다.
절차지향은
데이터를 중심으로 함수를 구현하고
객체지향은
기능을 중심으로 메서드를 구현하게 된다.
'백엔드' 카테고리의 다른 글
Nginx의 역할에 대해 아시나요🤔 (0) | 2024.06.21 |
---|---|
다양한 HTTP 통신 방법(크롤링과 Open API)📻 (0) | 2024.05.09 |
S3와 이미지 생성 Util 클래스(+CORS 에러) (0) | 2024.03.19 |
ec2 ip 주소에 도메인 입혀보자! nginx를 이용한 https 설정까지!! (0) | 2024.03.05 |
서버 구성과 깃헙 액션을 이용한 CI/CD 적용기 (0) | 2024.02.18 |