객체지향 프로그래밍
Object-Oriented Programming, OOP
컴퓨터 프로그래밍을 순차적으로 실행되는 명령어의 목록으로 보는 것이 아니라
여러 부품들의 조합 및 상호작용으로 파악하고자하는 패러다임
여기서 말하는 부품이 바로 객체
객체는 추상화를 통해 속성과 기능으로 분류하고 각각 변수와 함수로 구현된다
장점
- 프로그램을 보다 유연하고 변경이 용이하게 만든다 -> 코드 변경을 최소화하고 유지보수하는데 유리하다
- 코드 재사용을 통해 반복적인 코드를 최소화하고 코드를 최대한 간결하게 표현할 수 있다
- 인간 친화적이고 직관적 코드 작성에 유리하다
특징
추상화
Abstration
객체의 공통된 속성과 기능을 추출하여 정의하는 것
많은 언어에서 클래스로 추상화를 구현한다
상속
Inheritance
기존의 클래스를 재활용해서 새로운 클래스를 만드는 것
상위 클래스에서 확장된 하위 클래스들이 상위 클래스의 속성과 기능을 사용할 수 있다 -> 코드 반복을 최소화
다형성
객체의 속성과 기능이 상황에 따라 여러가지 형태를 가질 수 있는 것
- 오버라이딩(Overriding)
- 상위 클래스에서 정의된 메소드를 하위 클래스에서 재정의하는 것
- 오버로딩(Overloading)
- 같은 이름의 메소드를 매개변수의 수나 타입 등을 다르게 해서 다른 메소드처럼 사용하는 방식
상위 클래스 타입의 참조변수로 하위 클래스 객체를 참조할 수 있다
- 여러 하위 클래스 객체의 배열
- 의존성 주입
캡슐화
Encapsulation
서로 연관있는 속성과 기능을 하나의 캡슐로 만들어서 외부로부터 데이터를 보호하는 것
- 데이터 보호
- 외부에서 클래스에 정의된 속성과 기능에 함부로 접근하지 못하게 하는 것
- 접근 제어자(public, private 등)
- 데이터 은닉
- 내부 동작을 감추고 필요한 부분만 외부에서 볼 수 있게 하는 것
- 외부에서 너무 많은 것을 직접 접근할 경우 의존성이 높아짐
- 직접 접근하는 것을 최소화하기 위해 내부에서 외부에 제공하는 인터페이스를 정의하는 방식
'기본' 카테고리의 다른 글
N+1 문제 (0) | 2024.02.29 |
---|---|
[JavaScript] var, let, const (0) | 2024.02.27 |
트랜잭션 격리 수준 (0) | 2024.02.21 |
GraphQL (1) | 2023.11.29 |
[linux] zsh + oh-my-zsh 설치 및 설정 (0) | 2023.10.27 |