본문 바로가기
RECORDS/CleanCode

클린코드 #6

by _wavy 2024. 3. 10.

6장 객체와 자료 구조

코드를 설계하는 방법으로 객체와 자료구조를 비교하여 설명하는 장. 분량은 작으나 프로그래밍 방법에 대한 핵심적인 설명이 서술되어 있어 중요한 장이었다. 연달아서 두번 읽고 기존의 내 지식과 융화하여 정리해본다. 

 

1. 두가지 프로그래밍 방법

1. 객체지향 프로그래밍(Object-Oriented Programming)

  • 정의: 프로그램을 객체(object) 중심으로 설계, 구현하는 방법
  • 주요 특징: 캡슐화, 상속, 다형성, 추상화
  • 장점: 데이터 은닉을 통한 보안 강화에 유리, 각 모듈간의 분리, 상속을 통한 코드 재사용과 확장 가능성
  • 단점: 객체 설계가 중요
  • 프로그램 규모가 커지며 유지보수에 유리한 객체지향 프로그래밍이 더 많이 사용되는 추세

2. 절차지향 프로그래밍(Procedural programming)

  • 정의: 프로그램을 순차적인 명령문을 통해 구현하는 방법
  • 주요 특징: 순차적, 명령적, 데이터 노출과 조작 
  • 장점: 코드 작성이 직관적, 컴퓨터 작동 방식과 유사하여 실행 속도 빠름
  • 단점: 유지 보수 힘듦

 

2. 데이터 구조

1. 객체(object)

  • 객체지향
  • 자료를 비공개하고 동작을 공개(함수 중심)
  • 객체 내에 데이터와 데이터 조작 메서드를 함께 관리, 데이터는 메서드를 통해서만 변형 가능
  • 새로운 객체를 추가해야 하는 경우 유리

2. 자료구조(data structure)

  • 절차지향
  • 자료를 공개하고 동작 없음(데이터 중심)
  • 자료구조 밖에 별도의 함수를 만들어 데이터 탐색/조작/정렬 등 수행, 이 과정에서 데이터 변형 가능
  • 새로운 동작을 추가해야 하는 경우 유리

둘은 각각의 장단을 가지고 있으며 상호보완적이다. 둘을 섞은 잡종구조는 피해야 한다. 책에서는 자료를 공개하지 않고 추상적으로 표현하는 게 좋다는 입장을 표하고 있다. 여기서 변수를 private으로 선언해도 getter, setter를 제공한다면 구현을 외부로 노출한 것과 다름 없다고 말한다. 

 

/* 개선 전 */
const outputDir = ctx.getOptions().getScratchDir().getAbsolutePath();

// 임시 디렉토리(scratchDir)의 절대 경로가 왜 필요할까?
// ctx의 임시 파일을 생성하기 위해서.
// 그럼 ctx에 임시 파일 생성을 주문하자.
// ➜

/* 개선 후 */
const bos = ctx.createScratchFileStream(classFileName);

 

책의 java 코드를 js로 옮겨보았다. 메서드 반환 값의 메서드 연쇄 사용으로 객체 내부를 노출하는 코드에서 코드의 목적에 따라 별도의 메서드를 제공하는 객체 지향적인 방향으로 수정되었다. 이를 통해 객체의 캡슐화를 유지하며 가독성도 챙길 수 있다. 


TIL

이번 장은 java 중심의 객체지향 방법론을 위주로 설명이 되어있어 내게는 조금 추상적으로 다가왔다. js에서는 객체에 공개 변수와 메서드를 함께 작성할 수 있는데 앞으로는 이것을 분리해야 하는가? 예시 코드를 고치며 js에 적용시켜본 바로는 class 문법을 사용하지 않더라도 함수를 구현할 때 객체지향적인 방식을 사용해 더 나은 코드를 작성할 수 있겠다는 정도의 생각이 든다. 책의 내용을 직접 사용하지 못하는 점은 아쉽지만 객체와 자료구조의 개념도 다시 짚고 둘을 목적에 맞게 분리 사용해야 한다는 배움을 얻고 가는 장이었다.

'RECORDS > CleanCode' 카테고리의 다른 글

클린코드 #7  (0) 2024.03.11
클린코드 #5  (0) 2024.03.09
클린코드 #4  (0) 2024.03.06

댓글