SEUNGKYU CHO

SEUNGKYU CHO

Developer. Achitector

© 2019

자바 개발자가 공부하면 좋을법한 몇가지 요소들

날씨가 추워지고 하니 다사다난한 올해도 끝난다는게 점점 실감이 납니다. 새해에 대한 비장한 각오와 함께 오늘도 포스팅을 해보겠습니다.

최근 NodeJS와 함꼐 React, Angular, Vue와 같은 프레임워크가 인기를 끌고있어 한동안 자바스크립트의 실무 능력 향상에 시간을 쏟고 있었습니다. 그러다 보니 Java에 대한 익숙함과 멀어지고 있는것 같다는 생각이 들어 다시 Java를 복기하며 새로운것도 배웠으면(비록 항상 새롭더라도) 하는 생각에 Java 학습 주제에 대한 리스트를 추려보았으니 함께 해주시면 감사하겠습니다.

  1. 객체 지향 프로그래밍 ( Object Oriented Programing )
    • OOP는 어려운 주제는 아니라고 생각하지만 매우 중요합니다. 클래스 상속, 인터페이스 구현, 데이터와 행동의 추상화, 데이터와 클래스구현의 캡슐화, 다형성 등이 모두 핵심 주제입니다. 코드 재사용성의 극대화와 중복제거가 가장 큰 목적이라고 할 수 있으며 이를 위해 추상화, 캡슐화, 상속, 다형성의 개념을 활용할수 있습니다. 비록 JAVA에 한정된 개념은 아니지만 그렇기 때문에 오히려 더욱 효용성이 높아 공부하기에 가성비(?)가 뛰어나다고 보여집니다.
  2. JAVA 컬렉션
    • 단일 단위로 표시되는 개별 객체 그룹을 컬렉션이라고 할수 있겠습니다. 이는 JAVA 패키지의 java.util 내의 Collections 인터페이스를 통해 학습할수 있으며 대부분의 Java 유저라면 기본적인 사용이 간편하기 때문에 한번 심층적인 분석을 해보는것도 부담이 없을것 같습니다.
  3. Java Exception
    • 예외(Exception)는 프로그램의 실행 중에 발생하는 개발자가 의도하지 않은 비정상적 상황입니다. 이 메커니즘은 프로그램에서의 디버깅을 극대화시킬 수 있습니다. Java 내 예외클래스는 java.lang의 하위 유형이며 모든 언어와 프로그램 내에서 발생하지 않을수 없는 필수불가결한 요소이기 때문에 주의깊게 분석해볼 필요가 다분하다고 보여집니다.
  4. 입력/출력 스트림
    • Java는 스트림을 통해 입력 및 출력 작업을 수행합니다. 연속적인 데이터 흐름을 상상해볼수 있겠습니다. 이에 대하여 공부에 도움이 될 수 있는것이 우리가 흔히 쓰는 System.out.println() 의 숨겨진 진짜 의미를 파악해보는 것입니다. 이 사항에 대해서는 따로 포스팅을 올려보도록 하겠습니다.
  5. 알고리즘 및 퍼즐
    • 데이터 구조를 배워보는 동안 정렬/검색 방법에 대한 것을 공부하는것이 효율적인 학습 방법일수 있을것 같습니다. 자바를 비롯한 대부분의 컴퓨터 언어들은 정렬과 검색에 대한 알고리즘을 통해 구현한 라이브러리를 탑재하고 있습니다. 우리는 그 라이브러리에 대한것만 공부하는 것이 아닌 이러한 알고리즘을 통해 더 나은 향상법을 배우는것이 중요하다 보여집니다. 기본적인 알고리즘을 학습 후 자신만의 상황에 맞는 알고리즘을 구현해 내는 연습을 해보는것도 아주 훌륭한 공부방법이 될수 있을거라 보여집니다.
  6. Java 멀티쓰레딩
    • 모든 Java 유저는 “Hello world”를 표시할 수 있지만 만약 당신이 Java Thread API를 사용한다면 “Hello world”라는 문구가 추가 쓰레드에서 인쇄될수 있을까라는 고민을 해볼수 있겠습니다. 멀티쓰레딩은 Java 내에서 간단한 작업임과 동시에 가장 어려운 고급 자바 주제라는 이면도 가지고 있으니 심층적인 프로그램 구현 원리를 배워보고자 하는 Learner에게는 좋은 주제가 될수 있을것 같습니다.
  7. Java 패턴
    • Java를 프로 레벨로 작성하는 법을 배워보고 싶다면 Java의 디자인 패턴을 공부하는것이 선행되어야 할것 같습니다. Java에 기존재하는 많은 패턴들은 숙련된 개발자가 사용하는 모범 사례를 보여주고 있습니다. 또한 이러한 디자인 패턴들은 기존의 많은 문제들을 고려하고 이를 해결하기 위한 패턴들입니다. 사고를 미연에 방지하고 보다 나은 코드를 작성해야 한다는 의도에서 파생된 것들이 디자인 패턴이므로 이를 공부하는 것은 고급 숙련자가 되기 위해서 필수적인 코스일거라 보여집니다.
  8. 유닛테스트
    • 프로그램의 품질 레벨을 결정하는 가장 효율적인 방법은 좋은 테스트코드를 작성하는 것입니다. 당신의 코드를 어떻게 테스트해야 하는지 최적화된 방법을 알아낼수 있을때 코드의 개선방향도 알수 있습니다. 자신의 코드들을 유닛테스트 할수있는 능력이라는 것은 기업의 입장에서도 자기 자신의 실력에서도 매우 훌륭한 무기가 될수 있습니다.
  9. 람다
    • 람다표현식은 Java8에서부터 지원하기 시작했지만 아직 대다수의 프로그래머들이 이를 활용할수 있는 상태는 아닙니다. 이 또한 개발자로서의 강력한 무기가 될것이며 향후 프로그래밍에 있어 중요한 요소가 될것이라는 강력한 추세가 있어 조금은 신경써서 습득해보는 것이 좋을듯 합니다.
  10. JSON, RMI, HttpUrlConnection, 소켓의 직렬화
    • 고급 개발자로서 학습하고 연구해보아야 할만한 주제들로 보여집니다. 해당 내용에 대해서도 심층적인 포스팅을 해보도록 하겠습니다.

이상 자바의 중요 학습 주제를 나열해 보았습니다. 해당 내용들 중 일부는 차후 포스팅을 통해 함께 이해해 볼수 있도록 하겠습니다.

읽어주셔서 감사합니다.