본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다
패스트캠퍼스 환급챌린지란?
(~6/20) 50일의 기적 AI 환급반💫 | 패스트캠퍼스
초간단 미션! 하루 20분 공부하고 수강료 전액 환급에 AI 스킬 장착까지!
fastcampus.co.kr
https://fastcampus.info/4n8ztzq
사는 집 호수 라인 에어컨이 안되서 이웃들과 화가 난 상태이지만 재미있게 강의를 들을 수 있게 해주는 환급챌린지 최공!
33일차 공부 시작!

오늘의 강의 주제는 '차트 라이브러리 만들어보기-소프트웨어를 위한 소프트웨어'이다.

(오늘도 마찬가지로 모자이크 처리..)
오늘의 학습 내용
* "소프트웨어를 위한 소프트웨어"란 무엇인가
이번 챕터의 주제는 차트 라이브러리 만들기였지만 그동안 당연하게 지나쳤던 중요한 개념 하나를 짚고 넘어가고 싶다. 바로 소프트웨어를 위한 소프트웨어다. 이 개념은 현업에서 소프트웨어를 개발할 때 자연스럽게 마주치는 문제의식 중 하나이기도 하다.
일반적으로 사람들이 소프트웨어라고 하면 스마트폰에 다운로드한 앱이나 웹에서 사용하는 서비스 같은 사용자 중심의 소프트웨어를 떠올린다. 그런데 실상 우리가 만드는 많은 코드들은 사용자에게 직접 보이는 부분이 아니다. 어떤 기능을 직접 제공하기보다는 다른 소프트웨어나 다른 개발자가 사용할 수 있는 모듈 또는 인터페이스로 존재하는 경우가 많다.
예를 들어, 이번 실습에서 만든 차트 클래스만 해도 그렇다. 이 클래스 자체는 사용자와 직접 상호작용하지 않는다. 결국 이 차트를 화면에 그리는 데 사용할 코드가 따로 존재하고, 이 차트를 활용해 의도한 서비스를 구현하는 쪽도 전혀 다른 레이어에 있다. 즉, 우리는 '사용자를 위한 소프트웨어'가 아니라 '소프트웨어를 위한 소프트웨어'를 만든 것이다.
* 개발자의 일상, 그리고 관점의 전환
모든 개발자가 늘 완성된 제품만 만들어내는 것은 아니다. 매일 작은 함수 하나, 재사용 가능한 유틸리티 클래스 하나를 만들면서도 우리는 누군가(혹은 미래의 나)를 위한 소프트웨어를 개발하고 있다고 볼 수 있다.
소프트웨어는 항상 어떤 콘텍스트 속에서 만들어진다. 프로젝트 범위 내에서 사용될 코드일 수도 있고, 프로젝트 외부까지 공유될 수 있는 범용 라이브러리일 수도 있다. 예를 들어 단순한 예제 코드나 개인 프로젝트에서 만든 제한적인 기능들이 전자에 해당한다. 반면에 공개 라이브러리나 프레임워크 수준의 소프트웨어는 후자의 사례에 가깝다. 이런 구조를 미리 구분해두는 것만으로도 코드에 대한 태도 자체가 달라질 수 있다.
더 나아가 같은 기능을 구현한다고 해도 사용하는 사람의 관점에서 어떻게 쓰기 편한지 고민하는 태도는 고품질 소프트웨어의 핵심이다. 이를테면 함수 하나를 만들더라도 매개변수의 설계, 리턴 값의 구체성, 발생 가능한 예외에 대한 처리 등을 철저히 고민하는 자세가 필요하다. 나만을 위한 유틸성 함수라 하더라도 미래에 다시 그 코드를 보게 될 때 완전히 낯선 환경에서 쓰는 것처럼 느껴질 수 있기 때문이다.
* 차트 라이브러리를 예로 든 추상화의 중요성
이번 챕터에서 다룬 차트 클래스 역시 사실은 추상화의 결과물이다. 어떤 데이터가 주어졌을 때 그것을 시각적으로 표현하는 방식은 상황마다 다를 수 있다. 그래서 차트를 직접 그리지 않고 차트를 구성하는 기본 단위(데이터셋, 영역, 축, 그리드 등)를 코드로 추상화하고, 이를 바탕으로 최종 결과를 구성할 수 있게 했다. 이러한 추상화는 곧 확장 가능성과 재사용성을 담보하며, 흔히 말하는 오픈소스 라이브러리들이 갖추어야 할 핵심 요소이기도 하다.
물론 모든 개발자가 처음부터 이렇게 범용적인 구조를 의도하지는 않을 것이다. 하지만 어떤 계기를 통해, "내가 만든 코드를 다른 누군가도 사용할 수 있을까?"라고 자문하게 되는 순간, 소프트웨어를 생산하는 관점 자체가 확장된다.



(34강이라고 되어있지만 35강입니다. 챕터 타이틀 확인)

마치며
오늘도 환급 챌린지 35강 공부 완료!!
제공자의 입장에서 어떤 인터페이스를 설계하고, 사용자의 입장에서 어떻게 이를 이해하고 사용할지를 고려하는 설계 사고는 모든 개발자에게 오래도록 필요한 역량이다.
항상 개발을 하면서 어떻게 하면 좀 더 좋은 코드를 짤까 고민도 많이 하고 했는데 강사분께서 좋은 말씀을 해주셔서 도움이 되었다. 이번 강의를 통해 프로페셔널 개발자로서 가져야 할 사고 방식에 대해 생각하게 해준 중요한 시간이 되었다.