(11) 하이 마이 네임이즈 오오피!

데인·2022년 11월 21일
0

Study with Me

목록 보기
11/12
post-thumbnail

빰빠바바밤 빰빠밤 빰빠바바바 빰빰!

(대충 객체자향 프로그래밍 주요 개념 소개하겠다는 말)

하이 마이 네임 이즈 Encapsulation!
마이 네임 이즈 inheritance!
Abstraction!
Polymorphism!

빰빠바바밤 빰빠밤 빰빠바바바 빰빰!

Encapsulation(캡슐화)

  1. 데이터와 기능을 하나 단위로 묶어준다.
    데이터(속성)과 기능(메서드)를 따로 정의하지 않아도 돼!!!!!!!

  2. 아무나 못 건드리게 은닉(hiding)도 한다. (구현숨김,동작노출)
    객체 내 구현을 필요한 정도 수정해도 외부에서 동작할 때 코드흐름이 바뀌지 않는다.
    더 엄격한 클래스는 속성의 직접적인 접근을 막고 설정하는 (setter), 불러오는 함수(getter)를 철저하게 나눈다.

  3. 느슨한 결합(Loose Coupling)에도 유리해서 언제든 구현을 수정할 수 있다.
    코드 실행 순서에 따라 절차적으로 코드를 작성하지 않고,
    코드가 상징하는 실제 모습과 닮게 코드를 모아 결합!

*재사용이 가능하다!!!

Inheritance(상속)

부모 클래스의 특징을 자식 클래스가 물려받는 것. (불필요한 중복 제거)
자바스크립트는 프로토타입을 기반으로 상속을 구현한다.

예를 들어 아버지와 날 비교했을 때, 이름 성과 머리숱, 키, 좋아하는 음식 등은 같다. (유전자의 힘(프로토타입..?)이라고 생각하자)
위의 같은 값들은 유전자의 힘으로 아버지에게 상속받은 것이다.
그럼 난 아버지와 완전히 같은 사람인가? 아니다.
아버지에게 상속받은 것 말고도 학교, 친구, 직업 등 물려받지 못하고 내가 스스로 추가해야하는 속성/메서드도 있을 것이다.

요로케 상속에 대해 설명해봤다.

Abstraction(추상화)

내부 구현은 복잡, 실제 노출부분은 단순
부품 설계는 복잡, 제품 기능사용은 단순 (버튼?)
내 머릿 속은 복잡, 정작 하는 짓..은 단순(…..?)

..예를 들어 사람에게는 다양한 특징들이 있는데 내가 궁금한건 이름과 나이뿐인 것이다.. 그 이상의 것, 이름을 누가 지어줬는지, 왜 그 이름인지, 한자인지, 나이가 만으로 계산된건지, 출생신고를 늦게했는지 등은 딱히 관심없고 그냥 이름이랑 나이가 궁금한거다. 이 때, 이름과 나이는 노출이 가능하지만 그 외의 복잡한 정보(위에 서술한것보다도 더 많은)는 노출하지 않는다.

왜냐면 사실 딱히 궁금하지 않으니까. 궁금해 할 일이 없으니까..?

이게 캡슐화에서 말하는 ‘은닉’과 다른 점 아닐까..?
아니 사실 둘은 결이 같은데 그냥 그나마 약간의 차이를 나눠보자면 그렇다는 것이다.

추상화에서 말하는 은닉은 ‘궁금하지 않은 사실을 모르게 한다’,
캡슐화에서 말하는 은닉은 ‘궁금할 수 있는 사실이더라도 코드 진행에 오류가 발생하지 않도록 숨긴다’는 느낌에 가깝다고 생각한다.

Polymorphism(다형성)

똑같은 메서드라 하더라도, 다른 방식으로 구현될 수 있음.
특정 기능을 설계하는 부분과 동작하는 부분으로 분리하고 그 동작방법을 다양하게 만든 후 선택해서 사용할 수 있게 기능한다.

자바스크립트의 객체지향 언어는 프로토타입을 기반
자바스크립트의 클래스는 프로토타입을 기반.

profile
너무나 바쁜 걸 아직 갈 데가 많아 난. 호기심 가득한 세상을 다 펼쳐볼거야. Chase Me! - Dreamcatcher

0개의 댓글