OOP
-
메모리영역
- Static 프로그램이 실행되면서 같이 올라가는 것(console.log, var, const, let)
- Stack 프로세스 안에서 메인 함수와 메인함수 위에서 호출되는 메서드들
- Haep 객체와 배열 같은 데이터 크기가 일정하지 않은 변수나, 새로운 객체를 만들면 여기에 생성이 된다.
-
UML 표기법
- 클래스
- 속성 : 값으로 표현할 수 있는것(리터럴)
- 행위 : 자동사 / 타동사
- 함수(코드 실행블록)
- 프로시저 : 값을 리턴하지 않는다.
- 함수 : 값을 리턴한다
- 객체를 통해서만 이벤트(함수)를 호출(메소드)
- 클래스란, 분류하는 작업
- 객체는 클래스를 통해 속성과 행위를 넣어 만드는것
- 클래스는 분류, 객체는 그 분류안에서 유일한 값을 가지고 있는다.
- 모든 객체안에서는 사용되는 값은 클래스의 정적멤버로 사용한다.
- 인터페이스는 클래스로 분류하는것보다는 아래에 추가하는것이 좋다
- 클래스는 조금 더 큰 범위에서 분류해준다.
- 인터페이스는 작은 범위로 하기 때문에 비효율적이다.
- keyword
- new + 생성자를 호출하면 heap영역안에 새로운 객체가 할당된다.
- this는 새롭게 생성된 heap영역의 주소를 가르킨다
- heap이 가득차면 out of exception
- class 와 object는 다르다
- 분류 : 유일무이
- 사람 : 김연아
- 펭귄 : 펭수
- Null은 메모리의 0번지를 가르킨다
- 오버로딩 : 함수를 재정의한다.
- 오버라이딩 : 함수의 인자를 추가한다.
- 4대 원칙
- 캡슐화(Encapsulation) : private 변수를 활용하여 해당 인자를 외부에서 접근못하게
- 상속(Inheritance) : 상위에서 사용하던 기능을 하위에서도 사용할수있게 확장하는 것이다.
- 추상화(Abstraction) : 해당 객체의 특징을 크게 나타내어 그 부분을 나타내는 것(모델링), 해당 분야에 대해서 분류하고 객체를 설명한다
- 다형성(Polymorphism) : 사용편의를 위하여 override(중복정의) overroad(재정의)
SOLID
-
SRP(단일 책임 원칙) 작성된 클래스는 한가지의 기능을 가져야 한다. 이유는 클래스가 여러가지의 기능을 가지고 있으면, 기능을 수정한다면, 부수효과가 발생하여 유지보수하기 어렵다. -> Kiss : Keep It Small and Simple 작고 간단하게 만들어라
-
OCP(개방 폐쇄의 원칙) 변경되어야 할 부분과 변경되지 않아야 할 부분에 대해서 확실히 하여 구현에 의존하기 보다는 정의한 인터페이스에 의존하도록 코드를 작성한다. 이 부분(모듈이 만나는 부분은 인터페이스로 정의한다) 인터페이스는 표준을 강조한다(소나타 / 마티즈 보다는 자동차를 운전하는 나)
-
LSP(리스코프 치환 원칙) 자식 클래스는 최소환 자신의 부모 클래스에서 가능한 행위는 수행할 수 있어야 한다는 설계 원칙, 자식 클래스는 부모 클래스의 책임을 무시하거나, 재정의하지 않고 확장만 수행하도록 한다. 하위 클래서는 상위클래스의 기능을 사용되어야 한다.
-
ISP(인터페이스 분리 원칙) 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 설계원칙 SRP는 객체의 단일 책임을 뜻한다면, ISP는 인터페이스의 단일 책임이다. 클라이언트가 원하는 최소한의 모습만 보여줘라 남자 = 직장인, 아빠, 친구, 옆집사람 회사에서는 직장인의 모습만 보여주는 것처럼 클라이언트가 원하는 최소의 모습만 구현
-
DIP(의존 역전 원칙) 자동차 -> 스노우타이어 자동차는 스노우타이어에 의존한다. 스노우타이어에 의존하기 보다는 상위 인터페이스인 타이어에 의존하게 하자?? 스노우타이어라는 상세구현체보다는 타이어라는 상위 인터페이스에 의존한다