객체지향 프로그래밍

hyena_lee·2023년 1월 15일
0

TIL

목록 보기
20/42
post-thumbnail

1. 객체 지향 프로그래밍이란?

객체 지향 프로그래밍 (Object-Oriented Programming, OOP)은 프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.

🔴 객체란?

  • 객체는 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미하며 값을 저장 할 변수와 작업을 수행 할 메소드를 서로 연관된 것들끼리 묶어서 만든 것을 객체라고 할 수 있다.
  • 객체지향 프로그래밍을 레고에 빗대 표현 할 수 있는데, 객체가 레고의 조각이 될 것이고 레고의 조각을 조립해서 무언가를 만드는 방식이 객체지향 프로그래밍이라고 할 수 있다.
  • 객체는 또한 레고 조각과도 비슷하게 여러군데에서 재사용 할 수 있는데 이는 부품화 와 재사용성 이라는 객체 지향 프로그래밍의 특징을 보여주기도 한다.

🟠객체 지향 프로그래밍 언어

객체지향 프로그래밍을 지원하는 언어로는 C++ , C# , Java , Python , JavaScript , Ruby , Swift 등이 있다. 더 많은 언어를 알고 싶다면 객체 지향 언어를 참고해보자.

🟡 객체 지향 프로그래밍의 특징

: 객체 지향 프로그래밍은 크게 추상화 , 캡슐화 , 상속 , 다형성 의 네가지 특징을 가진다.

1. 추상화

  • 객체에서 공통된 속성과 행위를 추출 하는 것
  • 공통의 속성과 행위를 찾아서 타입을 정의하는 과정
  • 추상화는 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단하게 만드는 것

▶️추상화가 왜 필요할까?
'현대'와 같은 다른 자동차 브랜드가 추가될 수도 있다. 이때 추상화로 '자동차'를 구현 해놓으면 다른 곳의 코드를 수정할 필요 없이 추가로 만들 부분만 새로 생성해주면 된다.

2. 캡슐화

  • 데이터 구조와 데이터를 다루는 방법들을 결합 시켜 묶는 것 (변수와 함수를 하나로 묶는 것을 뜻함)
    낮은 결합도를 유지할 수 있도록 설계하는 것
  • 속성과 기능을 정의하는 변수와 메소드를 클래스라는 캡슐에 넣어서 분류하는 것으로 재활용이 원활하다는 장점이 있고 캡슐화를 통해서 정보은닉 을 활용 할 수도 있다. (접근제어자의 활용)

3. 상속

  • 클래스의 속성과 행위를 하위 클래스에 물려주거나 하위 클래스가 상위 클래스의 속성과 행위를 물려받는 것을 말한다
  • 새로운 클래스가 기존의 클래스의 데이터와 연산을 이용할 수 있게 하는 기능

4. 다형성

  • 하나의 변수명, 함수명이 상황에 따라 다른 의미로 해석 될 수 있는 것
  • 어떠한 요소에 여러 개념을 넣어 놓는 것
  • 객체 지향 프로그래밍은 하나의 클래스 내부에 같은 이름의 행위를 여러개 정의하거나 상위 클래스의 행위를 하위 클래스에서 재정의하여 사용할 수 있기 때문에 다형성이라는 특징을 갖게 된다.

▶️오버라이딩
상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용하는 것

▶️오버로딩
같은 이름의 메서드가 인자의 개수나 자료형에 따라 다른 기능을 하는 것

🔵객체 지향 프로그래밍의 장단점
장점

  • 클래스 단위로 모듈화시켜서 개발하기 때문에 업무 분담이 편리하고 대규모 소프트웨어 개발에 적합하다.
  • 클래스 단위로 수정이 가능하기 때문에 유지 보수가 편리하다.
  • 클래스를 재사용하거나 상속을 통해 확장함으로써 코드 재사용이 용이하다.

단점

  • 처리속도가 상대적으로 느리다.
  • 객체의 수가 많아짐에 따라 용량이 커질 수 있다.
  • 설계시 많은 시간과 노력이 필요하게 될 수 있다.

🟣객체 지향 프로그래밍의 반대는 절차 지향 프로그래밍이다?

객체 지향 프로그래밍은 절차 지향 프로그래밍과 장단점이 겹치는 부분이 있기 때문에 그렇게 생각이 들 수 있다. 하지만 절차지향은 순차적으로 실행에 초점이 되어있고 객체지향은 관계/조직에 초점을 맞추고 있다는 초점의 차이일 뿐이다.
절차적 프로그래밍이라고 해서 객체를 다루지 않는 것이 아니고, 객체지향 프로그래밍이라고해서 절차가 없는 것도 아니다.

🔸클래스와 인스턴스(객체)?

클래스 : 어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐 집단에 속하는 속성(attribute)과 행위(behavior)를 변수와 메서드로 정의한 것으로 객체를 만들기 위한 메타정보라고 볼 수 있다.

인스턴스(객체) : 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것으로 실제 프로그램에서 사용되는 데이터

🔹 객체 지향 프로그래밍에서 추상화 (자료의 추상화)

객체 지향 프로그래밍에서는 '추상화' 라는 단어를 여러 군데 붙일 수 있다.
여기서 말하는 추상화는 추상 클래스나 추상 클래스가 갖는 추상 메서드를 의미하기보다는 클래스를 설계하는 것 자체를 의미한다.
즉, "공통의" 속성이나 기능을 묶어 이름을 붙이는 것이다.

◽️getter, setter 를 사용하는 이유는 무엇인가요?

결론부터 말하면 getter, setter를 사용하면 메서드를 통해서 접근하기 때문에, 메서드 안에서 매개변수같이 어떤 올바르지 않은 입력에 대해 사전에 처리할 수 있게 제한하거나 조절할 수 있기 때문이다.
예를들면 setter에서 유효범위를 넘은 정수가 들어왔을 때의 처리를 하고나서 set하거나 예외처리를 해버릴 수 있는 것이다.
getter도 마찬가지로 굳이 예를들자면 자료에 무언가 더하거나 빼고 준다든지가 가능하다.

profile
실수를 두려워 말고 계속 도전 하는 개발자의 여정!

0개의 댓글