반응형

다음 장은 인터페이스이다.

 

여기까지 학습을 했다면 이제 자바 언어의 특성을 어느정도 이해하고, 객체지향 프로그래밍의 세계를 들여다보기 시작했을 것 이다.

 

그리고 자바를 좋아하는지 싫어하는지 같은 질문에도 답할 수 있게 되었을 것이다. 어느덧 자바 입문과정도 후반부에 도달한 것이다. 여기서 책을 덮고 이클립스를 삭제할 것인가, 아니면 후반부까지 끝을 낼 것인가? 라는 질문은 이 과정을 하는 사람의 의지에 달려있다.

 

*자바를 배우는 이유

 

물론 자바는 20년간 tiobe index 순위에서 항상 1,2위를 차지해왔다. C계열(C,C++,C#)을 합산하면 1위는 힘들었겠지만... 자바는 이번달에 15 %를 차지하여 2위이고, 전년 동월에는 1위를 했다.

 

 

tiobe index

물론 프로그래밍의 세계에는 그밖에 많은 언어들이 있다. 1위부터 10위까지를 보면 다들 컨셉이 확실하다.

 

많은 사람들에게 프로그래밍 그 자체를 의미하는 C언어,

객체지향 그 자체를 추구하는 자바,

이제는 일반인들도 배워야 살 수 있는 파이썬,

시스템에 접근할 수 있는 객체지향 프로그래밍 언어 C++,

C계열과 자바를 업그레이드한 닷넷 프레임워크의 C#,

초보자들에게 눈으로 보고 따라할 수 있게 해주는 비주얼 베이식,

프로트엔드에서 HTML/CSS와 함께 광범위하게 쓰이는 JS 자바스크립트,

빅데이터 분석을 위한 R,

워드프레스 같은 전통 웹개발 언어 생태계 PHP,

아이폰앱 개발을 위한 Swift

 

이 모든 언어들을 마스터한 사람은 드물 것이다. (있긴 있을 것 같다. 무술사범중에 태권도,합기도,검도 10단도 있으니까)

 

자바를 배우는 이유를 기술적인 부분과 사회적 부분으로 나눠 볼 수 있다.

 

- 기술적인 부분은 명확하다. 자바는 100% 객체지향 프로그래밍을 추구하고 있기 때문에 객체지향적 사고방식을 배울 수 있다. 100% 객체지향이라는 것은 컴퓨터공학과 교수님들이 학생들을 가르칠때 하시는 말씀이다. 아무래도 객체지향 방식이 2000년대 들어와서 주류였다는 것은 사실이다. 컴포넌트, 모듈방식이 기능만을 분리했다면 객체지향 방식은 객체간에 유기적인 관계를 체계적으로 관리하겠다는 의미가 강하다.

 

하나의 큰 프로젝트에 수백명의 개발인력이 투입되었다. 기획과 설계를 하고 실제 코딩이 진행된다. 그런데 1년쯤 지나 중간에 100명의 추가 인력이 투입되었다. 그럼 이 100명의 추가 인력은 무엇을 해야 하는가? 일단 지금까지 진행된 수십 만개의 코드들에 대해서 잘 알아야 될 것이다. 추가로 만드는 코드가 기존의 코드와 충돌하는지 확인이 필요하다. 그러면 100명의 인력들은 기존의 코드를 복기하는데만 몇개월이 소요될 것이다. 과정이 길수록 오류나 착오가 생길 수도 있다.

 

이럴때 객체지향 프로그래밍 방식은 다르게 할 수 있다. 새로오는 100명의 코더들은 기존의 수십만줄 코드의 모든 것을 알 필요가 없다. 자기들의 클래스를 만들어서 기존의 시스템에 연결시키면 된다. 다만 프로젝트의 규모가 크기때문에 규칙과 인터페이스를 철저히 지켜야한다. 새로만든 클래스가 잘 작동하면 하나의 기능이 새로 생기는 것이고, 만약 오류가 보고되고 해결이 안될 것 같다 싶으면 그 새로만든 클래스들을 버리면 된다.

 

생각하면 대기업의 모습과 꽤나 비슷하다. 대기업에는 수만명의 직원이 근무하고 매일 누군가 퇴직을 하고 새로운 직원이 배치된다. 누군가는 새로 들어와서 그가 속한 부서를 활성화 시키고 성과를 낼 수 있다. 새로운 클래스를 만들어 전체 프로젝트에 연결시킬 수 있는 것 처럼 새로운 사업부와 부서를 설치할 수도 있다. 한편 누군가 나이가 정년이라서, 이직을 해야되서 그만 둘 수 있다. 사업부가 오래되면 그 시대적 사명이 다하여 폐쇄하기도 한다. JDK 에 보면 과거 버전 자바의 클래스를 deprecated 한다는 내용이 있다. 그 말은 자바의 차세대 버전에서 더 이상 사용하지 않는다는 말이다. 사업부를 폐쇄하고 직원을 내보내는 것 처럼 처리한다. 퇴사한 기록만 남겨놓는다.

 

어쩌면 자바가 번영했던 이유도 대기업의 성격에 따라 설계했던 부분에 있지 않을까? 자바의 개발사 SUN을 인수한 ORACLE사는 일반에게 좀 생소할수도 있지만 IT쪽에서는 MS 다음 매출 2위인 최고의 글로벌기업이다.

 

대기업 집단 그들이 살아가는 방식(Hardware/물리적 방식, Software/조직형태,문화)과 가장 닮아있었기에 기업세계에서 지배적인 언어가 되었을지 모른다. 단정할 수 없는 것은 그런 방식이 꼭 대기업 집단의 전유물은 아니기 때문이다. 전 세계에서 가장 많이 팔린 게임소프트웨어인 마인크래프트는 인디게임 개발자 마르쿠스 페르손이 자바와 C++를 사용해서 만든 게임이다. 후대의 이야기는 마이크로소프트사가 마인크래프트를 인수하기 전에는 C++ 자바의 믹스다 보니까 코드의 난독화가 심했다고 한다. 그러나 인디게임사가 대기업에 비하여 아주 적은 소수의 개발자들인 것을 생각하면 당연히 부족한 것도 있었을 것이다. 개발 초창기에 객체지향이라는 신개념을 무장하여 게임을 기획하였을 것이다. 게임이 폭발적 인기를 얻으니까 마이크로 소프트사에게 인수되면서 결국 대기업에게 적합한 코드로 리뉴얼되었다.

 

인디게임이라는 것이 보통 대기업에서 개발을 시작하기가 어려운 게임이다. 우리가 대기업인데 이런 게임을 만들어야 하나 라는 고민을 하기 때문에 틈새시장이 있는 것이다. 그러나 사람들은 이 게임이 대기업에서 만들었건 인디에서 만들었건 별로 신경 쓰지 않는다. 일단 재미가 있어야 한다. 게이머들은 '음 대기업 APPXX사에서 만든 게임이군. 역시 대기업게임이야.' 라고 말하지 않는다. 재미가 없으면 그냥 메모리에서 삭제시킨다. 대기업이건 중소기업이건 내 시간을 쓸만큼 가치가 있는 게임이어야 한다.

 

이런 이야기를 하는 것은 자바의 객체 지향적 사고방식은 어떤 사회의 특정 분야에만 적용되지 않는다는 말이다. 그것은 짧은 코드로도 동물과 인간과의 관계를 표현할 수 도 있고, 자연, 과학, 사회, 문화 등 세상에 존재하는 무수한 개념들을 컴퓨터 세계로 끌어들일 수 있다. 인스턴스로 메모리에 생성하여 현실세계의 시뮬레이션을 할 수도 있다.

 

자바의 기술이 언젠가 낡은 것이 되고 다른 언어가 주류가 될 수도 있다. 최근 급속히 증가한 파이썬에 대한 수요를 보면 분명히 새로운 시대가 다가옴을 느낄 수 있다. 그러나 객체 지향적인 사고방식과 프로세스는 여전히 존재할 것이라 믿는다. 그것이 지금 자바를 배워둬야 하는 이유일 것이다.

 

두번째 이유는 사회적인 부분이다.

 

한국정부가 전자정부의 표준프레임워크로 지정했다. 자바의 스프링 프레임 워크의 아키텍쳐는 아래와 같다.

 

아키텍쳐:실행환경 - eGovFrame Portal 온라인 지원 포털

> 표준프레임워크 소개 > 아키텍쳐 > 실행환경 실행환경 아키텍쳐 구성 주요 특징 전자정부 표준프레임워크 실행환경의 주요 특징은 다음과 같습니다. 실행환경 경량화 : 하나의 파일로 일괄 배�

www.egovframe.go.kr

이 말은 공공기관과 관련된 수많은 사업관리는 자바의 스프링 프레임워크로 구성된다는 말이다. 그만큼 수요가 높다. 일자리 측면에서 당연히 자바 스프링을 다루는 기술자들이 필요하다. 매년 컴퓨터공학과를 졸업하고 IT회사에 취직하는 사람들은 많지만 그들이 전부 자바 스프링 프레임워크를 다루지는 않는다. 위의 Tiobe 사이트 처럼 수많은 분야가 있다. 엔지니어도 있고 관리운영자(Administrator)도 있다. 그러므로 다른 언어가 전문분야라도 자바를 스프링 프레임워크 단계까지 운영할 정도가 된다면 좋을 것이다.

최근에는 Front-end 라는 직업도 있고 점점 전문화가 심해지고 있는데 길게보면 그것도 어떻게 될지는 모른다. 분야에 특화된 두세개의 언어로 계속 연명할 수 있는 직업인가에 대한 부분은 미지수다. 다만 컴퓨터공학은 은퇴할때까지 공부하는 직업이라는 부분에 사람들간의 이견이 없다. 마스터 학위를 받고 실무에서 근무하는 사람 중에는 소프트웨어 개발자는 결국 컴퓨터 구조 즉 컴퓨터 자체에 대한 이해를 높여야 한다고 말하는 사람도 있다. 프레임워크냐 언어자체가 중요하냐 이런 논쟁도 컴퓨터 구조 중에서 어떤 것이 더 중요하냐는 논쟁일 수도 있다. 세상이 바뀌면 바뀌는데로 적응하는게 최선일 것이다. 일반의 역사에도 이런일이 반복되어 왔다. 하물며 하루가 다르게 신기술이 구기술을 갈아치우는 컴퓨팅의 세계에서는 당연하다.

 

정부가 굳이 전자정부 프레임워크를 자바 스프링으로 지정했는지는 이유가 있을 것이다. 한동안 세계적으로 ActiveX 가 사라지고 있을때까지도 열심히 ActiveX 를 사용하던게 엊그제 같은데 이제는 자바란다. 정부가 지정하면 결정적인 문제가 없는한 좀 오랫동안 시스템이 유지될 것이라 생각한다. 정부의 사업이란게 돈이 쉽게 들어가기도 하지만, 공공의 사유가 없으면 몇십년이라도 변하지 않는 특성이 있다. 코볼이나 포트란이 아직도 어딘가에서는 사용되는 사실이 놀라운 것처럼 자바라는 언어의 수명은 더 오래가지 않을까 싶다.

 

전자정부 말고도 안드로이드 개발 언어인 Kotlin은 자바와 매우 흡사한 구조를 가지고 있다. 그래서 자바에서 코틀린을 넘어가는 것은 어렵지 않은 편이다. 또 자바의 클래스파일들을 코틀린으로 100% 호환시킬 수 있다고 한다. 전세계 스마트폰 사용자중 70%가 안드로이드를 사용하고 있다. 자바를 마스터하면 약간의 추가 학습으로 안드로이드 개발이 가능하여 안드로이드 시장에 제품을 출시할 수 있다. 코틀린을 함수형 프로그래밍이라고 하는데 객체지향의 로직을 따르고 있다.

 

파이썬도 그렇고 최근 나온 프로그래밍 언어들의 특징인 것 같다. 너무 엄격한 클래스 설계에 매몰되지 않으면서, 그 시스템 자체는 클래스의 형태로 이루어져 있다. (파이썬의 모든 변수는 처음부터 객체이다. 객체라서 사용가능한 메소드가 있다) 사실 간단한 기능만 구현하려는데 객체를 다 설계하는 것은 일상생활에는 좀 맞지 않다. 파이썬같은 프로그래밍이 나왔을때 일반인(컴퓨터공학이 아닌 공학자, 과학자, 통계학자 등)의 보급률이 폭발적으로 증가했다는 것은 컴퓨터를 사용하기 위해서 고도의 개념까지 다 학습하지 않아도 된다는 것을 의미한다. 예를 들어 어떤 통계학자가 빅데이터를 분석하기 위해서 컴퓨터공학을 마스터할 필요가 없다. 필요할 때 적절한 라이브러리 모듈을 불러와서 사용하는데는 객체지향 프로그래밍 방법론을 다 배우지 않아도 되는 것이다. 오히려 그는 통계학의 지식을 바탕으로 빅데이터가 가지는 사회적 의미를 추론하는데 더 집중할 수 있다는 말이다. 그는 빅데이터를 분석한 결과를 대중에게 보고하면서 객체지향 프로세스를 설명할 필요가 없다. (듣는 사람도 곤란할테니까...)

 

앞쪽에 말한 순수한 객체지향에 대하여 배울 수 있다는 것은 컴퓨터공학을 연구하는 사람들에게 중요하다. 통계학자가 배울 필요가 없다는 것이지 컴퓨터공학자는 당연히 마스터해야 하는 것 이다. 코틀린 같은 안드로이드를 개발해도 자바를 먼저 학습한 사람의 학습속도와 응용력이 차이가 날 것이다.

 

내가 생각하는 컴퓨터구조를 이해하기 위해 학습해야할 언어들이다. 직업이나 세상의 유행과 100% 맞지 않다. 욕심을 적어보면 아래와 같다.

 

*컴퓨터 언어 (순서지만 동시에 배우게 된다. 진도가 빨리 나가는 차이다.)

 

 1. 절차적 프로그래밍 언어 C언어

 2. 객체 지향 프로그래밍 언어 Java

 3. 웹과 앱 프론트엔드 (HTML/CSS, JS)

 4. 범용 프로그래밍을 위한 Python

 5. 프레임워크 (Java Spring, Python django,Flask)

 6. 알고리즘 (Java/C)

 7. 어셈블리어(기계어와 1대1 대응되지만, 실제 쓸일은 별로 없으니 맛만 본다)

 8. Unity framework 게임뿐아니라 VR/AR도 개발하며 물리엔진이 들어있다.

 9. 여기까지 마스터하면 유단자(1단과 2단사이) 일 것이다. 앞으로는 스스로 필요한 부분(무예)를 찾아서 연구하는 단계다. 스타트업을 창업하여 기술을 개발할 수도 있고 제품을 팔아 돈을 벌수도 있다. 본인의 선택과 인생관에 따라 달라진다.

 

*언어와 별개로 배워야 할 사항 (어떤 경우 이쪽이 더 중요할 수도 있다)

 

 1. 수학 : 적어도 자기가 만드는 소프트웨어에 관련된 수학은 알고 있어야 한다. 앱에 따라 천차만별이지만 기본적인 수준은 중학수학 정도라고 한다. 중학수학이라 무시하면 안된다. 뉴턴이 미적분학을 정립한게 17세기 중반이다. 인류의 기록된 역사만 따져봐도 수천년간 축적한 개념이 중학수학에 들어있다. 알려면 확실하게 알아야 한다. 사실 어떤 의미에서 컴퓨터를 배우는 사람들은 수학을 배우기 더 쉽다. 공통의 로직만 짜면 계산은 컴퓨터가 순식간에 한다. 파이썬의 인터프리터는 복잡한 계산을 하는데 사용할 수 있다.

 

  2. 경영트렌드와 마케팅 : 경영분야는 최근에는 4차 산업 관련한 내용이 많다. IT공학을 어디에 접목시켜야 하는지 큰틀에서 볼 수 있다. 요새 마케팅은 주로 SNS와 디지털 콘텐츠 쪽으로 가고 있다. 인스타그램,유튜브,디즈니,넷플릭스에 대한 공부도 필요하다. 그들이 왜 잘되는지 왜 사람들이 그 콘텐츠를 소비하는지 여러 의견을 들어보는게 필요하다. (아직 결론이 안난 분야기 때문에)

 

 3. 통계학 : 보는 시각에 따라 수학의 응용 분야일 수도 있는데 빅데이터의 등장으로 최근에는 좀더 위상이 높아진 것 같다. 금융과 AI관련된 컨퍼런스를 보면 항상 AI를 개발하여 통계학의 기법으로 빅데이터를 분석한다는 이야기가 나온다. 최근의 경영자들은 AI가 수집하는 정보와 결론들이 중요하다고 믿고 있다. 그리고 강화학습을 할때 사용되는 기법도 통계학에서 나온다. 그래서 통계학의 기법 정도는 공부할 필요가 있다.

 

 4. 인공지능과 블록체인 : 두개를 묶었다. 이 분야는 수요가 많은데 공급이 없다고 세간에서 말하지만, 여전히 소수의 특정한 전문 연구원들의 분야로 보인다. 많은 경우 대학원과 연구실에서 하는 일이지 대부분의 일반 직장인이 혼자서 하는 일과는 거리가 멀다. 시간적 여유가 있다면 두루 학습할 필요는 있다고 본다. 인공지능 인공지능 하도 말해서 이제는 대중의 관심이 조금 생긴 분야다. 1900년대 중반에 신경망과 퍼셉트론의 개념은 만들어져 있었고 하드웨어 제약때문에 이제서야 빛을 보기 시작했다. 20년 전만 하더라도 인공지능은 SF 영화에서 사이코패스같은 천재 과학자가 만드는 것이라 생각했다. 그러니 갑자기 이해되기 어려운 것이 당연하다.

 

블록체인의 경우 엄청난 잠재력을 가지고 있지만 현재 블록체인의 기술적, 사회적 한계를 극복하려면 시간이 걸린다고 한다.(고려대학교 김승주 교수) 알고는 있어야할 사항이다. 관련 강의는 유튜브에도 올라와 있으니 한번쯤 보는 것을 추천한다. 실제 오프라인 3시간 짜리 강의를 들은 적이 있는데 전달력이 굉장히 좋은 교수님이라 최근에 방송 출연도 자주 하신다.

 

더 많은 내용들이 있겠지만 이번 포스트의 분량은 여기서 끓는다.

 

어떤 분야를 추구하건 4차 산업의 근간이 되는 분야가 컴퓨터공학이다.

 

내용을 정리 하면서 앞으로는 어떤 테크트리를 탄 인재가 나올지 기대를 해본다.

 

 

 

*블록체인강의 고려대학교 김승주 교수

*자바 웹 프레임워크 2020년

 

Best Java Web Frameworks for 2020 - Spring MVC, Struts, Vaadin, etc.

Listing of the top 10 Best Java Web Frameworks for easy and rapid Java web application development. Find the best Java web framework for your project needs.

www.dailyrazor.com

 

*마인크래프트 창시자

 

마르쿠스 페르손 - 나무위키

이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권�

namu.wiki

 

 

 

 

 

 

728x90

공유하기

facebook twitter kakaoTalk kakaostory naver band

본문과 관련 있는 내용으로 댓글을 남겨주시면 감사하겠습니다.

비밀글모드