[항해99] TIL

객체지향 프로그래밍이란 무엇인가?

@kkkk_biiin 2023. 12. 11. 22:18
728x90

 객체지향 프로그래밍은 동일한 속성(이름, 가격 등)을 가진 각각의 객체들을 일일이 생성하지 말고 하나의 틀을 바탕으로 생성하는 것을 지향하는 것을 의미한다. 

 

 

 먼저 객체지향 하지 않은 프로그래밍의 예시는 아래와 같다.

 

car1 = {
   name: 'S class',
   price: 8000,
   type: auto
}

car2 = {
   name: 'matiz',
   price: 1000,
   type: auto,
}

car2 = {
   name: 'sonata',
   price: 2000,
   type: manual,
}

 

 위와 같은 방법을 사용한다면 car가 100개가 있을 때 같은 코드를 백 번 쳐야하는 번거로운 상황이 발생하게 되며, 오타와 같이 휴먼 에러를 발생시킬 가능성이 크다. 이러한 문제를 해결하기 위한 코드 작성 방법이 객체지향 프로그래밍이라고 하며, 예시는 아래와 같다.

 

class Car {
   name: ''
   price: 0
   type: ''
   constructor(name, price, type) {
      this.name = name
      this.price = price
      this.type = type 
   }
}

let car1 = new Car('S class', 8000, auto)
let car2 = new Car('matiz', 1000, auto)
let car3 = new Car('sonata', 2000, manual)

 

 

 위의 코드처럼 Car라는 틀(class)을 만들어 준 뒤, 그 틀에 기반해서 car를 만드는 것이다. 위와 같이 코드를 작성하면 속성의 누락을 피할 수 있게 되고, 반복되는 코드를 줄일 수 있다는 장점이 있으며, 이를 객체지향 프로그래밍이라고 한다.

 

 이러한 객체지향 프로그래밍은 추상 클래스를 만들어서 고도화를 시킬 수 있다. 예를 들어 자동차와 TV라는 class에 있을 때 공통으로 가지고 있는 속성인 이름, 가격과 같은 것들을 class로 만드는 것이 추상 클래스라고하며, 방법은 아래와 같다.

 

class Product {
   name = ''
   price = 0
}

class Car extends Product {
   type = ''
   
   constructor(name, price, type) {
      super(name, price)
      this.type = type
   }
}

class Tv extends Product {
   company = ''
   
   constructor(name, price, type) {
      super(name, price)
      this.company = company
   }
}

let Car1 = new Car('S class', 8000, 'auto')
let Tv1 = new Tv('ultra', 1000, 'samsumg')

 

 먼저 공통적인 속성을 가지고 있는 클래스인 Product를 만들어줘야 한다. 이후 Car와 Tv 클래스를 만들어주면 되는데, 여기서 이전과 다른 부분은 super()라는 키워드를 통해 부모 클래스의 속성을 정의해줘야 한다는 점이다. 이 부분만 다르고 나머지 부분은 같기 때문에 여러 개의 클래스에서 공통되는 속성이 있을 경우 추상화를 시켜서 만들면 코드 반복을 줄일 수 있다.

 

 이러한 객체지향 프로그래밍은 초반 설계 작업에 시간이 든다는 단점이 있기는 하지만, 대규모 프로젝트의 관점에서는 데이터 관리가 쉬워진다는 장점이 있다.

 

 

 

 

Reference
https://ehddnjs8989.medium.com/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4-%EA%B0%9C%EB%B0%9C%EC%9D%98-%EA%B8%B0%EC%B4%88-oop-c50a7701223e
https://www.codestates.com/blog/content/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8A%B9%EC%A7%95
https://www.youtube.com/watch?v=fECCYukfVok&t=1160s
728x90