post-custom-banner

Class

1.객체 지향 프로그래밍(OOP)

OOP란 Object-oriented programming의 줄임말로 컴퓨터 프로그램 객체의 모임으로 파악하려는 프로그래밍 패러다임이다. 프로그래밍을 객체 단위로 나눠서 작성하는 것으로, 사람을 하나의 객체라고 한다면 사람을 구성하는 뇌부터 눈, 코, 입, 귀, 팔, 다리 등을 나눠서 관리하고 서로 상호작용하여 사람이 밥을 먹거나, 코딩을 하는 등의 동작을 하도록 만드는 것이다.

이렇게 OOP를 적용하면 프로그램을 변경하고 싶거나, 오류를 해결할 때 모든 구조를 뜯어 고치지 않고 문제가 되는 객체만 들여다 보면 된다. 즉 프로그램이 유연하고 변경이 용이하며, 개발과 보수가 간편하다는 이점이 있다. 잘 나누어진 객체는 직관적인 코드 분석을 가능하게 한다.

객체 지향의 중요한 프로그래밍 특성은 강한 응집력과 약한 결합력이다.
응집력이란 프로그램의 한 요소가 여러 기능에 얼마만큼 책임지고 있는지 나타내는 것으로, 응집력이 높으면 하나의 요소가 하나의 기능을 관여하기 때문에 요소의 목표가 뚜렷하지만 응집력이 낮으면 하나의 요소가 여러 기능을 관여하는 것으로 코드를 이해하기 어렵게 된다.
결합력이란 프로그램이 기능을 수행하는 데 있어 여러 요소가 얼마만큼 연관이 되어있는지를 나타내는 것으로, 결합력이 낮으면 각 요소를 독립적으로 관리하기 용이하지만 결합력이 높으면 하나의 요소를 수정하기 위해 여러 요소를 모두 확인해야 한다.

위에서 설명한 객체를 클래스에 빗대어 표현하자면 사람 클래스에서 필드(Field)는 눈, 코, 입과 같은 신체 기관이 되는 것이고, 메서드(Method)는 행동이 되는 것이다. 그리고 사람이 만들어질 때 초기값을 넣기 위해 호출되는 것을 생성자(Constructor)라고 하며 필드, 메소드, 생성자를 클래스의 멤버(Member)라고 부른다. 인스턴스(Instance)는 만들어진 각각의 사람을 나타낸다.

클래스 문법
-class 키워드를 이용해 클래스를 만들 수 있다.
-클래스 내에서 멤버를 사용하기 위해서는 this 키워드를 사용한다.
-new 키워드를 이용해 클래스의 인스턴스를 생성한다.

2.접근 제어자/ 상속

접근 제어자
접근 제어자는 속성 또는 메서드로의 접근을 제어하기 위해 사용한다.
타입스크립트엔 세가지 접근 제어자가 존재한다.
-public
-선언된 멤버를 클래스 밖에서도 자유롭게 접근할 수 있다.
-타입스크립트의 멤버는 기본적으로 public으로 선언되지만, 명시적으로 표현해도 된다.
-protected
-멤버가 포함된 클래스와 그 하위 클래스에서만 접근 가능하다.
-private
-선언된 멤버를 클래스 외부에서 접근할 수 없다.

상속
OOP는 상속을 이용해 존재하는 클래스를 확장해 새로운 클래스를 생성할 수 있다.
예를 들어 사람 클래스를 확장하여 아이, 어른, 노인과 같은 새로운 클래스를 만들 수 있다.

extends 키워드를 이용해 클래스를 상속하며 파생된 클래스를 하위 클래스(subclass), 기초 클래스를 상위 클래스(superclass)라고 부른다.

하위 클래스는 상위 클래스의 기능(메서드)를 확장한다. 사람 클래스에 움직이는 기능이 있었다면, 어른 노인 모두 똑같이 움직이는 기능을 확장해 사용한다. 다만, 둘의 움직이는 속도를 다르게 하는 등 세부적으로 변경하여 사용한다.

3.Getters & Setters /readonly /static

getters & setters
비공개로 설정하려는 속성은 private로 설정하여 직접 호출하거나 수정하지 않는다.
대신 getter / setter 함수를 사용한다.

클래스의 멤버에 잘못된 값을 넣어 에러를 발생시키는 것을 막기 위해 사용한다.
사람 클래스에 나이 속성이 있다고 할 때, 나이는 무조건 0보다 크기 때문에 getter / setter를 설정해 0 이하의 값이 들어오는 것을 방지할 수 있다.
이렇게 멤버에 직접적으로 접근하지 못하도록 하는 것을 캡슐화라고 한다.

readonly
읽기만 가능한 속성을 선언하기 위해 사용하며, 속성을 읽기 전용으로 설정해 변경할 수 없도록 만든다. 선언될 때나 생성자에 값을 설정한 이후에는 수정이 불가능한 속성이다.
변경될 경우가 없는 상수에 해당 키워드를 사용한다. const가 비슷한 기능을 하는데 const는 변수 참조를 위한 것이고 readonly는 속성을 위한 것이다.

static
객체마다 할당되지 않고 클래스의 모든 객체가 공유하는 멤버인 전역 멤버를 선언할 때 사용한다.
때문에 인스턴스 없이도 클래스 자체에서 해당변수 접근이 가능하다.
static은 멤버를 정적으로 선언하며 클래스명. 을 이용해 접근 가능하다.

4.추상 클래스

추상 클래스는 다른 클래스들이 파생될 수 있는 기초 클래스로 직접 인스턴스화를 할 수 없는 클래스다.

abstract 키워드를 이용해 추상 클래스나 추상 메서드를 정의하며, 추상 메서드는 클래스에 구현되어 있지 않기 때문에 파생된 클래스에서 구현해야 한다. 즉, 추상 클래스는 사용을 위해서 상속을 강제하는 클래스다.

템플릿 메서드 패턴(Template Method Pattern)
템플릿 메서드 패턴은 기능의 구조만 메서드에 정의하고, 하위 클래스에서 기능의 구조는 유지한 채 세부적인 알고리즘만 재정의 하는 디자인 패턴이다.

전체적인 구조가 동일하고, 상황에 따라 알고리즘은 확장 및 변경하기 때문에 코드 중복을 최소화 할 수 있는 이점이 있다.

추상 클래스를 이용해 상위 클래스에서 메서드의 구조를 잡고, 하위 클래스에서 디테일한 알고리즘을 변경함으로써 템플릿 메서드 패턴을 적용할 수 있다.

-디자인 패턴이란 소프트웨어 설계에서 공통적으로 자주 발생하는 문제들을 해결하기 위해 설계 방법을 정리한 패턴을 말한다. 문제가 발생하지 않는 코드를 작성하기 위한 정형화된 방법이다.

profile
꾸준한 기록을 통해, 좋은 개발자가 되겠습니다.
post-custom-banner

0개의 댓글