이제 자바스크립트의 기초를 모두 다졌으니 제가 이것을 활용한 멋진 것들을 소개할게요
"객체지향 프로그래밍"을 말이지요
하지만 먼저 왜 유용한지부터 알아야 합니다
그래서 객체지향 프로그램이 되면 좋을 것 같은 프로그램을 준비했어요
시작하기 되게 좋은 프로그램이예요 간단한 리터럴을 저장하는 두 개의 변수가 있어요
전에 배웠듯이 리터럴은 두 개의 중괄호로 나타내고요
안에 속성의 이름과 값들을 적어줍니다
두 개의 객체 리터럴하고 밑에 drawWinston 함수도 있습니다
1개의 매개변수 함수지요
매개변수를 통해 이미지를 알맞는 x좌표 y좌표에 출력합니다
닉네임과 나이를 포함한 캡션 또한 생성합니다
그리고 밑에서 우리는 drawWinston()이라는 함수를 teen과 adult에 대해 호출합니다
그래서 다음과 같이 출력됩니다
좋네요 이제 리터럴을 보면
뭔가 되게 비슷하다는 것을 눈치 채셨을 거예요
서로 비슷한 속성을 가지고 있고요 둘다 drawWinston() 함수에 쓰입니다
생각해보면, 둘 다 윈스턴의 타입을 기술하는 거죠?
그리고 우리는 윈스턴을 기술하는 추상적인 타입도 생각할 수 있겠죠?
모든 윈스턴은 닉네임과 나이 그리고 xy 좌표를 가지고 있어야 합니다
여기 우리는 2개의 윈스턴의 인스턴스를 생성했어요
윈스턴을 표현하기 위해서는 여기 십대의 윈스턴과 성인 윈스턴이 있잖아요.
서로 서로 닮은 것들이 너무 많아요
그렇게 생각한다면 인간, 사람이라는 추상 자료형도 생각해볼 수 있겠죠?
그럼 우리 모두는 우리만의 속성을 가진 인스턴스에 불과합니다
이제 우리는 객체 지향 프로그래밍을 해볼텐데요 윈스턴 변수들을
윈스턴 객체의 인스턴스로 표현해서 비슷한 속성을 공유하게 하려고 해요
그러기 위해서 우리는 윈스턴 추상 자료형을 정의해야 돼요
이제 변수를 만들게요
이 안에 자료형을 저장해야겠죠? var Winston이라 할게요 보통 객체 타입으로 첫문자는 대문자로 씁니다
함수랑 같다고 둘게요
이 함수를 특별하게 "생성자 함수"라고 부릅니다
왜냐하면 이 함수가 호출될 때마다 윈스턴 인스턴스가 생기니까요
teenageWinston을 생성하고 싶거나 adultWinston을 생성하고 싶으면 호출하면 되겠죠
그럼 이 함수가 속성에 관한 정보를 전달 받아야만이 완벽한 윈스턴을 만들 수 있겠죠?
이 경우에는 nickname, age, x, y이겠죠
인수가 전달되고 나서 우리는 이걸로 뭔가 해야겠죠
윈스턴 객체에 정보를 넣어주어야 합니다
그래서 새로운 수식어 "this" 를 쓸게요 "this" 는 현재의 인스턴스를 의미합니다
그러면 this.nickname, 즉 이번 객체의 닉네임 속성에는
생성자로부터 전달받은 값을 넣어주어야 합니다
this.age = age this.x = x 그리고
this.y = y 이면 되겠죠?
그럼 우리는 윈스턴이라고 부르는 추상 자료형을 만들었고요 이 자료형은 새로운 윈스턴을 만들기 위한 생성자가 있어요
이걸 이용해 볼게요
winstonTeen을 다시 만들건데요 이번에는 winstonTeen =
중괄호 대신에 = new Winston 이라 할게요
"이제 새로운 윈스턴 인스턴스를 만든다"라는 뜻이예요
여기에 정보를 전달해야 되므로, "Winsteen", 15, 20, 50 로 쓸게요
전에 썼던 것은 지워버리고요
이제 윈스틴이 만들어졌죠?
이제 winstonAdult = new Winston()
이름은 "Mr. Winst-a-lot"이고요,
30, 229, 50을 차례로 넣을게요 전에 리터럴은 지워버리고요
짜잔 제대로 작동하네요
아직까지 우리가 한 것을 정리해볼게요 우리가 만든 윈스턴 추상자료형이고요
자기자신만의 속성을 가지고 새로운 윈스턴 인스턴스를 만들었어요
그리고 전달받은 속성을 생성자로 다시 대입 시켰죠
외워야 합니다 this.nickname과 this.age에서
만약에 this.age 대입문을 안썼다면 "정의 안됨" 오류가 날 거예요
왜냐하면 밑에 drawWinston 함수에서
winston에 나이 속성이 있어야 하기 때문이죠
다시 말해서, this.age를 안썼다면
나이 속성이 없는 거지요 생성자로 전달 받긴 했는데
그것으로 아무것도 안했잖아요 this를 이용해 객체에 대입해야 합니다.
여기에 덧붙여서 말하자면,
여러분은 아마 이렇게 생각할지도 몰라요 "코드가 작동하는 군. 그냥 멋지네"
"전에 했던 거랑 똑같네"
하지만 이제 모든 윈스턴이 같은 생성자에 들어간다는 겁니다
만약에 윈스턴에서 뭔가를 고치면
모든 윈스턴들이 다 고쳐집니다 예를 들어 나이 뒤에 "years old"라 하면
여기만 바꿨는데, 모든 윈스턴 뒤에 "years old"가 붙어요
인스턴스만의 속성에 공통적인 속성도 공유할 수 있다는 것이지요
이것이 바로 객체 지향 프로그래밍 만의 장점이지요
여러 종류의 객체가 있을 때 이것을 인스턴스로 만들 수 있고,
이 객체들이 서로 같은 속성이 있다면
뭔가가 다를 때 이 속성은 저 속성과는 다르다는 것을 쉽게 알 수 있겠죠?
그게 아니라 속성이 서로 비슷하다면, 서로 공유하는 함수를 만들어
비슷하게 이용하면 될 것입니다 이것이 바로 객체지향 프로그래밍의 장점의 일부고요
이것 말고도 좋은 점은 무척 많답니다
다음에 만나요!