brunch

You can make anything
by writing

C.S.Lewis

by 힐데와소피 Jul 11. 2022

복잡해진 코드와 내 마음

[자바인강 4주차]  상속과 추상화, 인터페이스

3~4주차부터는 자바의 핵심인 '객체 지향 프로그래밍'의 주요 구조를 클래스의 상속과 추상 클래스 생성, 인터페이스를 통해 살펴봤다. 강의를 주욱 듣다보니, 루만의 책에서 읽은 '기능적 분화'라는 단어가 불현듯 생각이 났다. 루만은 사회가 커지고 복잡해지면서 절차적이고 위계적이었던 전근대사회에서 기능적으로 분화된 체계로 나뉜 근대사회로 이행했다고 분석했다. 


코드 역시 비슷한 것 같았다. 단순한 기능만 구현하면 되었던 이전의 코드들은 절차적이고 위계적이이었을 것이다. 하지만 수행해야 하는 작업이 어렵고 복잡해질수록, 코드 또한 많아지고 복잡해졌다. 이런 코드를 위계적으로만 관리하는 데에 한계가 드러났고, 사람들은 이를 기능적으로 묶고 연결하기 시작했다. 클래스, 추상클래스와 인터페이스는 이러한 기능적 분류를 잘 드러내준다.


보통 하나의 단순한 기능만 담당하는 클래스는 상속과 추상화를 통해 여러 클래스들끼리 기능적으로 연결되기 시작한다. 간단한 동작만 수행하면 되었던 추억의 오락실 게임과 현재의 게임들을 비교해보자. 현재의 게임들은 캐릭터의 능력치와 장비 설정, 패시브 스킬의 발동 여부, 주변 환경의 강점과 약점 적용, 다른 플레이어와의 상호작용 등등의 여러 복잡한 관계를 모두 구현하고 있다. 이러한 기능들이 분화되어 복잡한 게임 세상을 만들어 낸 것이다..!



1980년 팩맨과 2016년 오버워치



누가 그러지 않았나, "고도로 발달한 과학 기술은 마법과 구별할 수 없다"고.. "고도로 복잡한 코드는 마법과 구별할 수 없다". 이러한 컴퓨터 언어의 진화에 대한 새삼스러운 감명과 동시에 이러한 복잡함을 구현하기 위한 얼마나 많은 작업들이 있었는지 짐작되니 부담스럽기도 했다. 복잡한 구조를 어떻게 만드는지에 대한 방법을 배우고 있지만, 어떻게 내가 이걸 쓸 수 있을까 하는 의문도 들었다. 내가 코드를 통해 보는 것은 메타버스지만, 지금 내가 코드로 할 수 있는 것이라곤 더하기 빼기니까.


자바의 쓸모를 더 찾아보고 싶어졌다. 수업의 내용이 점차 복잡해지고 어려워질수록 자바라는 언어를 보다 더 다양하게 배우고, 여러 쓸모를 찾아보는 검색을 병행했다. 생활코딩에서는 자바 언어 원리에 대한 이해에 도움을 받았다. 패캠 수업을 들으면서 이해가 부족하다 생각했던 상속, 생성자 위주로 강의를 들었는데 같은 개념과 기능을 다르게 설명하는 것(물론 사람마다 다르겠지만)이 좋았다.


프로그래머스는 이전에 자바스크립트를 배울려고 얼쩡거린 사이트인데, 언어마다의 코딩을 연습하는 문제가 있어서 당장 배운 것은 연습하는데 도움이 될 것 같았다. (물론 첫 문제부터 어떻게 풀어야 하는지 암담했지만.) 백준이라는 사이트도 프로그래머들 사이에서 실습용 문제나 여러 코딩 관련 문제를 연습하는 용도로 많이 알려진 사이트다. 실습 문제를 풀어보면서 자바와 더 친해질 수 있길..


5주차부터는 자바의 자료구조던데 아직도 자바에 익숙치가 않아서 갈 길이 더욱 멀어보인다. 



https://opentutorials.org/course/4074



https://school.programmers.co.kr/learn/challenges


https://www.acmicpc.net/problemset




#패스트캠퍼스 #내일배움카드 #국비지원 #K디지털기초역량훈련 #바이트디그리 #자바인강









브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari