Skip to content

Latest commit

 

History

History
31 lines (17 loc) · 4.05 KB

File metadata and controls

31 lines (17 loc) · 4.05 KB

추상화

오늘은 추가로 기록하고 싶은 내용이 있어 두번째 기록을 하려고 한다. 두번째 내용은 추상화의 중요성이다. 추상화는 소프트웨어 개발에서 핵심 개념 중 하나로, 복잡한 시스템을 간단한 형태로 표현하여 효율적이고 유지보수 가능한 코드를 작성하게 해준다. 추상화가 잘된 코드와 설계는 개발 속도와 코드 품질에 큰 영향을 미치며, 장기적인 관점에서의 유지보수성을 크게 향상시킨다.

1. 추상화란?

추상화는 중요한 정보는 강조하고 불필요한 세부 사항은 숨기는 것을 의미한다. 이를 통해 객체의 핵심 동작을 정의하면서도, 내부 구현에 대한 세부 사항은 감출 수 있다. 예를 들어, List와 같은 자료구조 인터페이스를 사용할 때, 실제 내부 구현이 ArrayList인지 LinkedList인지 알 필요 없이 동일한 방식으로 접근할 수 있다는 점이 추상화의 대표적인 예이다.

예시

  • Java의 List 인터페이스: List 인터페이스는 데이터가 어떻게 저장되는지에 관계없이 add(), remove(), get() 등 공통 동작을 제공한다. 이를 통해 개발자는 세부 구현에 상관없이 리스트 기능을 사용할 수 있다.
  • API 설계: 외부로부터 입력을 받아 특정 작업을 수행하는 API는 추상화를 통해 사용자가 내부 로직을 알 필요 없이 기능을 이용할 수 있게 한다.

2. 추상화의 중요성

  • 코드의 재사용성 증가: 추상화를 통해 공통 기능을 일반화하고, 이를 여러 클래스에서 공유할 수 있어 코드의 재사용성이 높아진다. 예를 들어, 데이터베이스 접근 코드나 파일 입출력 기능 등을 추상화하면, 여러 클래스에서 이를 재사용하기가 쉬워진다.

  • 유지보수성 향상: 추상화를 통해 기능 구현과 인터페이스가 분리되므로, 내부 구현을 수정하더라도 외부에 미치는 영향을 최소화할 수 있다. 이는 코드 수정이 빈번한 대규모 프로젝트에서 매우 유용하다.

  • 가독성 향상: 추상화된 인터페이스는 필요한 기능에만 집중할 수 있게 하여, 코드를 읽고 이해하기가 쉬워진다. 각 클래스가 가진 역할이 명확해지고, 구조가 정돈된 코드를 작성할 수 있게 된다.

  • 테스트 용이성: 추상화된 인터페이스를 통해 기능을 모의 테스트로 구현하기 쉬워져, 테스트 가능성을 높일 수 있다. 이를 통해 테스트 코드 작성이 더 간편해지고, 다양한 시나리오를 시뮬레이션할 수 있다.

3. 개인적으로 느낀 추상화의 필요성

개발을 진행하면서 코드를 단순히 동작하게 만드는 것만큼, 구조적이고 유지보수가 쉬운 코드를 작성하는 것이 중요하다는 것을 실감했다. 복잡한 비즈니스 로직을 다루는 코드에서 추상화가 이루어지지 않으면, 기능을 추가하거나 변경할 때마다 모든 관련 코드를 다시 수정해야 하는 상황이 발생할 수 있다. 또한, 코드 중복이 늘어나고 가독성도 떨어져, 프로젝트의 유지보수에 큰 어려움을 초래한다.

추상화를 통해 공통 기능은 상위 레벨에서 정의하고, 세부 구현은 각 하위 클래스가 담당하도록 구조를 잡으면, 코드의 복잡도를 줄이고 수정 시 영향을 최소화할 수 있다. 이렇게 하면 코드의 일관성을 유지하면서도 기능 확장이 쉬운 시스템을 만들 수 있다.

결론

추상화는 코드의 재사용성, 유지보수성, 가독성, 테스트 용이성을 높이는 중요한 기법이다. 단순히 기능을 구현하는 것에 그치지 않고, 구조적이고 체계적인 코드를 작성하기 위해 추상화가 필수적이라는 것을 다시금 깨닫게 되었다. 앞으로도 소프트웨어의 확장성과 유지보수성을 고려하여 추상화된 설계를 통해 높은 품질의 소프트웨어를 개발하고자 한다.