객체지향 프로그래밍 이해하기

권지현·2023년 5월 1일
0

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

필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍으로 객체 지향 개념의 가장 기본적인 전제는 실제 세계는 객체들로 구성되어 있으며, 보여지는 모든 현상과 발생하는 모든 사건은 이러한 객체들 간의 상호작용을 통해 발생한다는 것이다.

자바스크립트는 멀티-패러다임 언어로 명령형(imperative), 함수형(functional), 프로토타입 기반(prototype-based)의 객체지향 언어이다.

객체지향 프로그래밍을 구성하는 요소

  • 클래스 - 어떤 문제를 해결하기위해 추상화를 거쳐 집단에 속하는 속성(attribute)과 행위(behavior)를 변수와 메서드로 정의한 것
    속성(변수)과 메서드(함수) ?

    class Car(name){
    	constructor(name){
    	color = this.name
    	}
    
    	ride(){
    		console.log("달린다")
    	}
    }
    
    const yellowCar = new Car('yellow')
    yellowCar.color // 속성
    yellowCar.ride() // 함수
    	```
  • 객체(인스턴스) : 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것으로 실제 프로그램에서 사용되는 데이터

객체지향 프로그래밍의 대표적인 특성 4가지

  1. 추상화 - 객체의 공통적인 속성과 기능을 추출하여 정의하는 것. 즉, "공통의" 속성이나 기능을 묶어 이름을 붙이는 것이다.
    const today = new Date()
    today.getDay()
    //요일을 숫자로 변환한 값
    //getDay()의 값을 구하기 위해 일어나는 일련의 과정들은 확인할 수 없음.
  2. 캡슐화 - 클래스 내부에서 각각의 객체들이 프라이빗(private)일 때는 다른 객체들이 그 상태에 직접 접근할 수 없으며 대신 그들은 클래스 내부에 메소드라고 불리는 퍼블릭(public) 상태의 함수가 있다면 그 함수에 호출(접근)할 수 있다.
    캡슐화의 목적
       1. 코드 재활용(퍼블릭 함수)
       2. 정보 은닉(클래스 내부에 어떤 로직이 있는지 접근 불가)
	const today = new Date()
	today.getDay() //getDay() -> 퍼블릭 함수에 접근해서 값을 얻을 수 있음.
  1. 상속 - 부모클래스의 속성과 기능을 그대로 사용하면서 기능의 일부분만 변경해야 할 경우 상속받은 자식클래스에서 해당 기능만 다시 수정(정의)하여 사용할 수 있게 하는 것
    상속이 가능한 조건
      1. IS-A 관계 성립할 때( → A는 B일때)
      2. 재사용 관점 X, 기능의 확장 관점 O
	class Bicycle extends Car {}
	const yellowBicycle = new Bicycle('yellow')
	yellowBicycle.ride() //'달린다'
  1. 다형성(다향한 형태) - 서로 다른 클래스의 객체가 같은 동작 수행 명령을 받았을 때, 각자의 특성에 맞는 방식으로 동작하는 것. 그래서 구체적으로 현재 어떤 클래스 객체가 참조되는 지 무관하게 프로그래밍이 가능하다.
    다형성의 특징
      오버라이딩 : 부모클래스의 메서드와 같은 이름, 매개변수를 재정의 하는것.
      오버로딩 : 같은 이름의 함수를 여러개 정의하고, 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 있게 하는 것.
	class Bicycle extends Car{
		ride(){
			super.ride()
			console.log('오토바이')
        }
	}

	const yellowBicycle = new Bicycle('yellow')
	yellowCar.ride() // '달린다', '오토바이'

장점과 단점

  • 장점
    같은 로직을 구현할 경우 반복적인 코드를 최소화하고, 코드 재사용성을 높일 수 있다.
    오류가 생기거나 변경 사항에서 클래스만 변경하면 되기 때문에 유지보수에 용이하다.
    → 대형 프로젝트에 적합

  • 단점
    코드 변경(→ 상속과 다형성의 특징)이 용이하다보니 잘못된 상속의 위험이나 부모 클래스의 변경이 모든 자식 클래스에도 영향을 줄 수 있다.

[참고]
https://jeong-pro.tistory.com/95
https://velog.io/@feelslikemmmm/JavaScriptClass
https://www.freecodecamp.org/korean/news/6sal-aiege-gaegce-jihyang-peurogeuraeming-gaenyeom-seolmyeonghaneun-bangbeob/

profile
FE 개발자 성장 기록 👩🏻‍💻

0개의 댓글