📋 오늘 배운 내용 📋
중요한 개념인 스레드에 대해 배우고 스레드와 지난번에 배운 소켓을 이용해 간단한 채팅프로그램을 작성하는 실습을 진행했다.
스레드의 run메서드에 작성한 코드를 동작시켜두면 기존 프로그램 실행 흐름과는 별도로 동작한다는 사실이 생소하지만 신기했다.
필요에 따라 Thread를 상속받는 클래스를 작성하여 백그라운드 프로그램 돌리듯이 돌릴 수 있게 되었는데 몇 가지 궁금한 내용도 생겼다.
스레드가 여러개 동시에 실행되고 있을 때 프로그램 한줄 한줄의 실행 순서에 대한 궁금증이 첫번째로 들었다. 각 스레드별로 할당된 라인이 끝나면 다른 스레드가 실행되는 건지, 아니면 일정 시간동안 할당이 되는건지 등 스레드간 컴퓨터 자원할당 규칙이 궁금해졌다.
❗ 부족했던 점 ❗
강사님이 주신 한글 요구사항에 맞게 프로그램을 짜면서 매번 느끼는 거지만, 정말 코드의 질이 낮다는 생각을 했다. DTO나 기본 패턴들을 만들고 나서 실질적인 로직을 짤 때는 그때그때 떠오르는 임기응변으로 어떻게든 동작시켰는데, 반복문이나 조건문의 중첩도 많고 그때그때 만들어 쓰는 변수들도 꽤 있어서 다른사람이 보기엔 굉장히 난해한 코드였다.
심지어 내가 작성한 코드인데도 한 두시간 안보다가 다시 보니 조금씩 헷갈리는 부분이 있을 정도였다. 자바를 처음 배울 때보단 그래도 많이 좋아졌지만, 지금보다 더 많이 고민하고, 틀이나 요구사항을 명확하게 문장화 한 뒤 코드에 손을대서 구현하는 연습이 필요할 것 같다.
❓ 생각해볼 점 ❓
진도를 나가다 보면 다음 진도때 나갈 개념(컬렉션 등)을 알면 훨씬 편하게 짤 수 있는 코드들이 다수 있다. 그때 마다 다른 개념을 사용하지 않고 주어진 개념만을 사용하는게 옳은 것인지, 알고있다면 사용하는 것을 주저하지 않아야 하는지에 대한 고민이 조금 있다.
사실 개인적으로 둘 다 좋은 개발자가 갖춰야할 역량이라고 생각한다. 개발은 개인단위로 이루어지지 않기 때문에 내가 알고 있는 개념이고 더 쉬운 방법이어도 다른 팀원들과의 합의가 되지 않으면 사용하기 어려울 수도 있다.
이렇게 어떤 변수나 제약이 발생할지 모르는 상황 속에서 최신 기능이나 편한 기능만을 고집하지 않고, 주어진 여건속에서 해내려고 노력하는 과정속에서 끈기와 깊은 이해가 따라온다고 생각한다.
하지만 반대급부로 생각해보면 더 높은 생산성을 얻어낼 수 있음에도 새로운 기능이나 개념을 도입하지 않는 것은 능력의 부족이라고 볼 수 있다. 기본 개념을 아무리 잘 알더라도 생산성이 낮아 기여하는 바가 낮다면 무슨 의미가 있을까?
해답은 명확하게 내리지 못할 것 같다. 다만 두 가지 방법 모두를 적극적으로 시도하는 개발자가 되어야겠다는 생각은 든다. 둘 중 하나를 택하는 것이 아닌, 그저 오랫동안 열정적으로 개발하면서 절대적인 시간을 늘려 둘 다 쟁취하는 방법이 최선이지 않을까?