본문 바로가기

Frontend Study

[FE_Bootcamp] 22일차_객체 지향 프로그래밍

이번에는 객체 지향 프로그래밍에 대해 알아보도록 한다.

 

2. 객체 지향 프로그래밍

객체 지향 프로그래밍은 프로그램 설계 방법론중 하나로, 프로그램을 단순히 데이터와 메서드로 나누는 것이 아니라, 수많은 '객체(object)'로 나눈 뒤 이 객체들의 상호작용을 통해 실행하는 방법이다.

 

객체 지향이 등장하기 전에는 '절차 지향 프로그래밍'이 있었다.

절차 지향 프로그래밍은 '순차적인 처리'를 중요시 했는데, 이는 컴퓨터의 코드 해석 메커니즘과 유사했기 때문에 처리 속도가 빨랐다. 

하지만 정해진 순서에서 어긋나면 답이 없었고, 그만큼 유지보수도 어려웠다는 단점이 있었다.

때문에 점점 절차 지향 프로그래밍으로 프로젝트를 진행하기 어려워졌고, 객체 지향 프로그래밍이 개발되었다.

 

객체 지향 프로그래밍에서는 속성과 메서드가 존재하는 '클래스'를 생성한 뒤, 이 클래스를 본뜬 '인스턴스 객체'들을 통해 기능을 구현한다. 이전 게시물에 자세히 설명해 두었으니 참고.

2023.03.15 - [코드스테이츠] - [FE_Bootcamp] 22일차_클래스와 인스턴스

 

[FE_Bootcamp] 22일차_클래스와 인스턴스

오늘은 프로그래밍에서 가장 빡센 파트중 하나인 객체 지향 프로그래밍에 대해 배우는 날이다. 학교에서 가장 처음 들었던 프로그래밍 과목이 바로 '객체 지향 프로그래밍'이었는데, 따라가기

kinggh.tistory.com

 

그렇다면 객체 지향 프로그래밍은 어떤 특성을 가지고 있을까?

 

A. 캡슐화

캡슐화란 '데이터(속성)와 기능(메서드)을 하나의 클래스로 묶는 것'을 말한다.

전에 썼던 기타 클래스를 다시 가져와 보자

 

class ElectricGuitar {
  constructor(brand, type, color){
    this.brand = brand
    this.type = type
    this.color = color
  }
  string = 6
  parts = ['head', 'neck', 'body']
  play(){
    console.log('전기 신호가 입력되었으므로 ' + this.type + '에서 소리가 납니다')
  }
  off(){
    console.log('전기 신호가 끊겼으므로 ' + this.type + '에서 소리가 꺼집니다')
  }
}

 

여기서 brand, type, color, string, parts는 속성, play()와 off()는 메서드에 해당한다. 

이 속성들과 메서드들을 ElectricGuitar라는 클래스에 한번에 넣어두고, 생성된 인스턴스를 통해 각 속성과 메서드에 쉽게 접근할 수 있게 된다.

 

또한 캡슐화는 '정보 은닉' 기능도 함께 수행하는데, 이는 속성이나 메서드를 밖으로 드러내지 않는 것을 말한다.

이 정보 은닉을 통해, 하나의 클래스를 수정함으로써 여러 인스턴스를 수정할 수 있고, 각 클래스간의 결합도를 떨어트려 유연함과 유지보수성을 높일 수 있다는 장점이 있다.

 

B. 추상화

추상화란, 복잡한 내부 구조에 비해 겉으로 드러나는 부분은 아주 간단하게 만드는 것이다.

 

기타의 연주 원리

 

우리가 기타를 연주할 때, 생각보다 많은 물리 법칙과 수학 공식이 사용된다.

하지만, 우리는 이런 원리에 대해 배울 필요 없이 그냥 줄을 튕기기만 하면 소리를 낼 수 있다.

이처럼 내부 구조를 굳이 알 필요 없이 겉으로 드러난 부분으로만 기능을 수행하는 것을 추상화라 하는 것이다.

 

캡슐화와는 다르게, 추상화는 사용하는데 불필요한 메서드 등을 노출시키지 않고, 그냥 이름으로 정의하는 것에 포커스가 맞춰져 있다.

 

C. 상속

상속은 부모 클래스의 속성을 자식 클래스가 그대로 물려받는 것이다.기존에 작성되어 있던 클래스의 요소를 새로 만들고 싶은 클래스에 상속한 뒤, 새로 만드는 클래스에는 새로운 속성이나 클래스를 추가해줄 수 있다

 

상속

'기타'라는 부모 클래스에는 string, parts, brand, color라는 속성들이 있다.

그리고 이 '기타' 클래스를 상속받은 '일렉기타' 클래스에는 string, parts, brand, color 외에도 type이라는 속성과 play(), off()라는 메서드가 추가로 존재한다.

 

만약 상속을 사용하지 않고, 기타 클래스와 일렉기타 클래스를 따로 작성한다면 비효율적일 뿐더러 시간도 훨씬 오래 걸릴 것이다.

 

D. 다형성

다형성이란 하나의 변수 또는 함수가 상황에 따라 다르게 해석될 수 있다는 것을 말한다.

 

다형성

 

같은 play() 메서드로 동작된다 하더라도, 인스턴스마다 play() 메서드가 호출되었을 떄 어떤 동작을 실행할지는 모두 다르다. 

만약, 다형성이 존재하지 않는다면 클래스에서 메서드를 선언할 때 모든 동작에 대해 일일히 조건문으로 분기를 해주어야 하는 불편함이 생길 수있다.

하지만 다형성 덕분에 같은 속성, 메서드라도 객체의 특성에 따라 작성이 가능해진 것이다.

 

객체 지향 프로그래밍은 , 사람이 세계를 보고 이해하는 방법과 매우 비슷하다.

코드 상에서, 혹은 화면에 보이는 하나의 요소를 객체 단위로 구분시켜서 생각하면, 보다 이해하기 쉬운 코드를 작성할 수 있을 것이다.

By Codestates