카테고리 없음

객체 지향 프로그램

해말그미 2023. 3. 15. 15:36

객체지향프로그래밍은 코드는 정리하는 방법이다.

데이터에 대한 생각, 구조 방식이라고도 할 수 있다.

자바스크립트도 객체 지향 언어 방식을 지원하고 있다.

즉 이 oop를 배우면 그 기술을 다양한 많은 언어에 적용할 수 있다는 뜻이다.

즉 데이터를 모델링하고, 조작하고 , 엑세스 하는 방법에 사용하면 좋다

 

비디오 게임을 만든다고 상상해보자

1. 플레이어 객체가 필요함

2.각 플레이어 객체는 각각 다른 데이터를 갖을 것이고

3.플레이어들이 많아진다면?

반복되는 패턴들과 이슈들이 발견된다.

name, health,skill같은 동일한 속성들을 가지고 있다

다른것은 속성 안의 데이터이다.

플레이어를 구성하는 모습이 어떠해야한다 하는 일종의 '구조'가 없다.

철자 오류가 있으면 딱 봐서는 찾기가 힘들다.

내가 새로운 속성'경험치'를 추가하고 싶다면 한땀 한땀 추가해야함

플레이어 팩토리를 생성한다

class는 일종의 구조 , 설계도를 만들어줘서 속성은 같고 데이터는 다른 것을 만들어준다.

위와 같이 코드가 훨씬 깔끔해진다.

위와 같이 속성에 접근할 수도 있다.

즉 class는 동일한 속성, 그러나 각기 다른 데이터를 갖고 있는 수 많은 플레이어 객체들을 생산할 수 있다.

일론 머스크를 플레이어 클래스의 인스턴스 혹은 객체로 지정

여기서 constructor은 함수 안에 있기에 메서드라고 한다.

this는 플레이어 클래스 내의 속성 및 메서드를 지칭하는 방법이다.

 

 

클래스 안의 메서드가 클래스를 더 높은 단계로 진화시켜 준다.

클래스는 수많은 종류의 메서드들을 가질 수 있다.

sayHello와 같은 메서드를 만들었다면

플레이어 클래스에서 생성된 모든 객체가sayHello 메서드를 호출할 수 있다.

전투 게임을 만든다면, 플레이어가 맞았을 때 무슨일이 생기는지 코딩할 수도 있다.

메서도로 조작할 수 있는 인터페이스를 만들 수 있게 되었다.

 

oop의 핵심 개념

1. 상속 - 코드중복을 줄이고 코드를  재사용 가능한 조각으로 나눌 수 있다.

자녀 클래스가 부모 클래스의 속성을 갖게된다.

심즈를 만든다면 '인간'을 위한 클래스를 만들어야 한다.

인간에 속하는 아기 클래스도 필요하다.

청소년 클래스 이는 인간이고 욕을 하는 속성을 가지고 있다.

아기와 청소년은 모두 인간에 속하고 코드중복이 일어난다.

모든 클래스에 중복되는 것을 적는 대신 human클래스에서 확장하면 된다.

위와 같이 코드가 바뀔것이다

아기 클래스나 청소년 클래스가 인간에서 확장된다고 하면

아기 청소년 클래스가 인간 클래스의 속성을 다 갖고 추가적으로 그들만의 다른 속성을 갖을 수 있다.

 

하지만 이렇게만 하면 작동하지는 않을 것이다.

아기, 청소년 클래스에서 인간의 constructor메서드를 호출하려면

super method라는 걸 호출해야 한다.

캡술화

데이터와 기능을 하나의 단위로 묶는 것

은닉: 구현은 숨기고 ,동작은 노출시킴

느슨한 결합에 유리 : 언제든 구현을 수정할 수 있음

 

추상화는

내부 구현은 아주 복잡한데, 실제로 노출되는 부분은 단순하게 만든다는 개념입니다.

 

다형성

객체 역시 똑같은 메서드라 하더라도, 다른 방식으로 구현될 수 있습니다.

 

참조

https://www.youtube.com/watch?v=cg1xvFy1JQQ