객체 지향 프로그래밍
1. 왜 나왔을까??(why)
삼성에서 tv에 대한 정보를 기입한다고 해보자
같이 여러 대의 tv에 정보를 하나하나 적기에는 너무 힘들다
tv가 100대 1000대씩 있다면 하기도 힘들고 실수가 발생하기 쉽다.
2. class
위의 불편함 때문에 나온 것이 class 즉, 어떤 속성이 있고 어떤 기능이 있는지 정의해 둔 작업 지시서 같은 것이다.
위와 같이 지시서를 정해놓고 계속 쓰는 것이다.
그렇다면 이제 값은 어떻게 넣을 것인가??
3.constructor(생성자)
class에 있는 속성들에 값을 초기화시켜 주는 함수이다.
이런 식으로 했을 경우, 저것들이 클래스 속성의 name인지 매개변수의 인자 name인지 헷갈릴 수 있다.
4.this
그래서 나온 것이 this이다. 클래스 안에 있는 name라고 꼭 집어주는 것!
5. 결론
전반적으로 이렇게 간편하게 나타낼 수 있다.
new 연산자를 통해 생성자 함수를 호출하여 새로운 tv 객체를 생성
let tv1 = new TV('yuni tv', 200, '56inch'); 이런 식으로 다른 종류의 tv들도 나타낼 수 있다!
6. 객체 지향 프로그래밍 특징
1. 상속
코드를 더 작은 단위로 나누고 재사용할 수 있다.
겹치는 것들을 줄이고 싶다! 계속 치기 싫다!!
이런 것을 줄이기 위해
2. 추상화
구현 세부 정보를 숨기는 일반 인터페이스를 지정하는 행위
product 안에 있는 값을 tv가 어떻게 들고 올 것인가?? ㅡ> extends
(단순히 떼주고 지운다고 되는 것이 아님, 갖고 와서 쓸 수 있어야 함)
즉 tv는 product안에 있는 것을 마치 내거 인 것 마냥 쓸 수 있다!
여기서 그럼 계속 생성자 constructor을 쓸 수 있을까?? ㅡ> No!!
name랑 price가 여기 없고 부모인 product에 있음!
super()
super함수를 통해서 부모의 생성자 함수를 호출한다. super는부모인 product 부르는 것이다.
super(name, price)에서name, price 값이 이 product로 넘어가면서 constructor를 써 줄 수 있고
부모 값을 먼저 넣어주면 부모 생성자가 알아서 초기화시키고 그다음 자식을 속성을 처리한다.
위 사진처럼 잘 ~ 상속된 것을 알 수 있다.
함수 추가
함수도 추가할 수 있다.
price가 200이 아니라 200만 원이라고 써야 한다면???
함수를 호출해서 원하는 형태의 값을 줄 수도 있다.
console.log(tv1.getPrice()); ㅡ> 200만 원
3. 캡슐화
변수들과 변수에 관련된 함수들을 같은 클래스에 넣을 수 있다 ㅡ> 캡슐화
즉 데이터, 데이터를 활용하는 함수를 캡슐 안에 두는 것
함수와 데이터가 개념적으로 연관되어 있기 때문에 캡슐화를 사용해서 코드를 개선할 수 있다.
-1000만 원이 출력된다
이러면 안 됨!!
이러한 상황에 제약을 주기 위해 속성과 관련이 있는 함수를 정의해 줄 수 있다.
2. 다형성
똑같은 메소드라도, 다른 방식으로 구현될 수 있음
상속에서 부모 클래스의 속성이 자식 클래스에게 상속되는 것을 기억해야 한다.
사람 클래스에서 확장됨을 알 수 있다.
즉 한국인 그리고 이탈리아인 클래스의 객체는
둘 다 모두 say hi메서드를 갖는 것이다.
한국인 클래스가 사람 클래스에서 확장이 되지만 say hi 방법은 다르게 하기를 원할 때
이를 위해선 한국인 클래스 만의 say hi 메소드를 재정의 해야 한다.
즉 객체지향 프로그래밍은
장점 : 큰 프로젝트 할 때 데이터 관리가 잘 된다는 것
단점 : 설계하는데 시간이 오래 걸린다는 것