객체지향 프로그래밍

현채은·2023년 3월 15일
0

🧚‍♀️ 객체지향 프로그래밍

  • 객체지향 프로그램이 등장하기 전 ➡️ 절차지향 프로그래밍
    • 절차지향 프로그래밍 : 순차적인 명령의 조합
  • 객체지향 언어 : "클래스" 라고 부르는 데이터 모델의 틀을 사용해 코드작성 ( 패러다임 )
    • 패러다임 : 그시대에 유행하는 개발방식
    • 절차지향과 비교했을때 각 방법의 장단점 존재 !
      • 객체지향 : 사람이 이해하기 쉬운 코드
      • 절차지향 : 컴퓨터가 이해하기 쉬운 코드 ( 메모리 사용 적음 )
    • 현대 언어 대부분 ➡️ 객체지향 특징
    • 데이터, 기능이 별개로 취급 X ➡️ 한번에 묶여서 처리 가능
    • javascript는 객체지향 패턴으로 작성 가능한 언어

OOP

: 프로그램 설계철학으로 객체로 그룹화 된다.

  • 각 객체 내에는 데이터( 속성 )와 기능( 메서드 )이 함께 있다

< 객체지향 프로그래밍 4가지 개념 >

🧚‍♀️ 캡슐화 (Encapsulation)


: 데이터 (속성)와 기능 ( 메서드 ) 을 따로 정의하는 것 X
➡️ 하나의 객체 안에 넣어서 묶는 것 (데이터와 기능의 느슨한 결합)

  • 느스한 결합(Loose Coding) : 코드 실행순서에 따른 절차적 코드 X
    ➡️ 코드가 상징하는 실제모습과 닮게 코드를 모아 결합
    ➡️ 외부에서 변수의 값을 마음대로 바꿀 수 없도록 내부의 정보를 외부로 부터 은폐함 ( 데이터 은닉 )

  • 정보은닉(hidning) : 내부 데이터, 구조가 외부로 노출되지 않도록 만드는 것 ( 객체 외부에서 필요한 동작만 노출시킴 )

  • 속성의 직접적인 접근을 막고 설정하는 함수 ( setter ), 불러오는 함수 ( getter ) 이용

  • 자바에서는 대표적으로 public, defalut, protected, private의 접근자를 통해 구현이 가능 ( 오른쪽으로 갈수록 더 좁은 범위를 가짐 )

🧚‍♀️ 추상화 ( Abstraction )


: 내부 구현은 복잡하지만 실제로 노출되는 부분은 단순하게 만드는 것이다.

  • 실제로 노출되는 부분 ( interface, API application programing interface )

  • 예를 들면, 전화기는 사람들은 실제로 수화기를 들고 번호를 누르면 전화가 걸린다고 생각하지만,
    실제로 전화기 내부에서는 어떤 현상이 일어나는지 생각하지 않는다 !

  • 캡슐화와 구분할 필요가 있다

    • 캡슐화 : 코드나 데이터를 은닉하여 외부에서 접근하지 못하도록 포커스
    • 추상화 : 클래스를 사용하는 사람에게 필요하지 않은 메서드를 노출 시키지 않고 단순하게 정의할 수 있도록 하는 것에 포커스 ( 편의 )

🧚‍♀️ 상속 ( Inheritance )


: 기존의 클래스를 재활용하여 새로운 클래스를 작성하는 것

  • 기본 클래스의 특징을 기본 클래스를 기반으로 파생된 파생 클래스가 상속 받는 것
    ➡️ 기존 만들어 둔 클래스의 속성, 메서드를 이어받아 코드의 재사용성을 향상 시켜줌
  • ex> 클래스 : 사람
    속성: ( 이름, 나이 )
    메서드 : ( 먹다 )

🤔 이때, 학생이라는 또다른 클래스가 만들고 싶으면?

  • 새로 학생이라는 클래스를 생성하는 것 보다 , 사람이라는 클래스를 상속받아 학생 클래스에 추가로 속성이나 메서드를 추가하는 것이 효과적이다.
    ➡️ 사람과 학생은 비슷한 속성이 많기 때문 !

  • 속성: ( 이름, 나이 ) + 성적

  • 메서드 : ( 먹다 ) + 등교하다

🧚‍♀️ 다형성 ( Polymorphism )


: 객체 지향 프로그래밍은 다양항 형태를 가질 수 있다.

  • 어떤 객체의 속성이나 기능이 그 맥락에 따라 다른 역할을 수행할수 있는 것
    • 예를 들면, 나는 지금 학교에서는 학생, 부모님에게는 딸, 또한 동생에게는 언니 등 여러가지 역할을 맡고있다 !
  • 상위 클래스 타입의 참조변수하위 클래스의 객체를 참조할 수 있도록 하는 것
profile
프론트엔드 개발자

0개의 댓글