TIL] 객체지향

Song-Minhyung·2023년 7월 17일
0

TIL

목록 보기
5/12

객체지향

전에 게임을 만들때 무조건 c++을 써서 익숙하다 생각했는데 전혀 아니었다.
아직까지 타입스크립트에서 interface와 abstract class가 거의 비슷하다고 생각되고 헷갈리기 때문이다.

절차지향과 상반되는 단어인데 아마 한번쯤 들어본 단어일것이다.
절차지향은 코드가 위에서 아래로 쭉 읽는 방식으로 진행된다.

그래서 프로젝트가 커질수록 코드를 읽기 힘들어지고 유지보수 역시 힘들어지게 된다.
그래서 등장한 개념이 객체지향이다. 객체지향은 프로그램을 상태와 행위로 나눈다.

자동차 클래스를 만들 때 예를 한번 들어보자
상태에는 자동차 모양, 속도, 차량번호 등이 있을 수 있겠고,
행위에는 달리다, 서다 등이 있을 수 있을것이다.

이제 이 클래스를 상속받아 새로운 자동차 K5를 만들면 중복을 최대한 줄이면서 알아보기 쉽게 그리고 디버깅 하기 쉽게 코드를 짤 수 있다.

interface와 abstract class

이번에 처음에 요구사항을 분석하고 코드를 설계할 때 interface를 쓸 생각을 했다.
class에 선언을 강제하고 무조건 구현하게 만들기 위해서였다.
하지만 abstract class를 선언하고 무조건 넣어야 하는 변수 혹은 함수만 abstract로 써줬다. 굳이 interface를 쓸 필요가 없었기 때문이다.

그래서 interface와 abstract class의 차이점을 찾아보았다.

구조

  • interface: 실제 구형은 전혀 제공하지 않는다.
  • abstract : class는 원하는 내용만 구현을 제공할 수 있다.

상속

  • interface: 클래스가 아닌 객체 유형으로 클래스가 인터페이스를 구현할 수 있다. 그리고 다중상속이 가능하고, 인터페이스 간의 다중상속도 가능하다.
  • abstract : 다중 상속이 안되고, 하위 클래스는 추상 클래스의 메서드를 구현해야한다.

구조

  • interface: 인스턴스화 할 수 없다. 구헌 규약을 정의, 해당 규약을 따르는 클래스 혹은 객체를 사용한다.
  • abstract : 인스턴스화 할 수없다. 직접 객체생성 불가능하며, 이걸로 인스턴스를 생성해야 하낟.

멤버수준

  • interface: 메서드, 속성, 인덱서, 이벤트 및 다양한 인덱싱 정의가 가능하지만 인스턴스 변수의 정의는 불가능하다.
  • abstract : 인스턴스 변수, 메서드 및 생성자 등 모든 멤버의 포함이 가능하다.

추상클래스는 클래스 계층 구조와 공통적인 구현을 가진 클래스를 정의하는데 유용하고,
인터페이스는 객체의 동작 및 구조를 규정해 코드의 일관성과 유연성을 증가하는데 유용하다.

즉, 추상클래스는 구현 세부사항을 제공하고 확장성을 가지고, 인터페이스는 구현을 강제하고 다른 클래스 간에 계약(약속)을 형성한다.

오늘한 실수

다음부터 오늘의 실수를 반복하지 않기 위해 오늘부터 오늘 실수한 목록을 정리해 보려고 한다.

  • 상속관계를 표현하는데 abstract class를 사용하자.
  • 보드 등을 탐색할 때 중간에 break하지 않도록 다시 체크해보자.
  • 클래스 설계에 조금 더 신경쓰자
profile
기록하는 블로그

1개의 댓글

comment-user-thumbnail
2023년 7월 17일

훌륭한 글이네요. 감사합니다.

답글 달기

관련 채용 정보