brunch

You can make anything
by writing

- C.S.Lewis -

[Java] #3 자바 언어의 기본요소

들어가는 글: 오늘은 누구나 아는 자바 언어의 기본 요소들을 간략하게 정리해봅니다. 가능하면 (왜?)라는 부분도 말씀드려볼께요


1. 프로그래밍 언어의 기본 요소 


프로그래밍 언어가 되려면 어떤 것이 필요할까요? 

가장 중요한 것은 결국 (기계어)로 번역될 수 있어야 합니다. 


저도 기계어 혹은 어셈블리를 재대로 배운 적은 없지만 다음과 같은 것들은 필요해보이네요 

1) 레지스터 : 값을 저장하거나 참조함 

2) CPU에서 제공하는 다양한 op code들: 이런게 실제 명령어지요. 이것들이 메모리를 조작합니다. 

3) 그외 JUMP문과 각종 연산들 


사실 2번과 3번의 영역은 혼용될 수도 있습니다. 

현재는 개념만 아시면 됩니다. 


즉, 프로그래밍 언어의 소스 코드는 적절한 컴파일 과정을 거치면 각 운영체제에 맞는 목적 코드로 번역되어야 실행할 수 있습니다. 


그렇다면 자바 언어의 기본 요소는 무엇이 있을까요? 


2. 절차지향적인 자바의 요소들 


먼저 main() 함수가 필요합니다. 그래야 실행파일의 시작점(entry point)을 알 수 있으니까요. 

그 다음에는 


1) 변수 

2) 데이터 타입 

3) 연산자 

4) 각종 제어문: if, for, while, do while, switch 

5) 사용자정의 함수 혹은 메서드 (static 메서드라고 해도 좋습니다) 


솔직히 작은 프로그램을 작성할 때는 main()함수를 포함하는 단일 클래스로도 프로그램을 작성할 수 있습니다. 예를 들어 구구단을 작성한다던가, 아래 코딩 도장의 level 1 문제들을 풀 때는 굳이 class를 사용할 필요가 없습니다. 패키지도 사용할 필요가 없습니다. 


예) 피보나치 수열 구하기 

링크: http://codingdojang.com/scode/461?answer_mode=hide 


피보나치 수열이란, 첫 번째 항의 값이 0이고 두 번째 항의 값이 1일 때, 이후의 항들은 이전의 두 항을 더한 값으로 이루어지는 수열을 말한다.
예) 0, 1, 1, 2, 3, 5, 8, 13
인풋을 정수 n으로 받았을때, n 이하까지의 피보나치 수열을 출력하는 프로그램을 작성하세요

설계를 필요로 하지 않는 이러한 퀴즈들에 객체지향 요소들을 굳이 사용할 이유는 없습니다. 

물론, 고유한 알고리즘을 담고 있거나 라이브러리와 같이 (재활용)을 위해서는 어떤 구조가 필요하죠. 


앞서 소개드린 요소들은 "C언어 기초" 시간에도 들을 수 있는 내용입니다. 

단, 포인터는 제외하구요. 자바 언어에서는 포인터를 의도적으로 배제하였습니다. 


3. 자바의 객체지향적 요소들 


객체지향이라는 말은 참 어렵습니다. 

1) 한국어 원이민인 우리는 회화에서 (객체)라는 단어를 사용하지 않습니다. 

2) 영어 수업시간에도 Object 라는 단어는 배울 가능성이 없습니다. 

3) 객체도 모르는데 지향이라니요? Oriented?? 더 어려운 단어입니다. 


저는 객체라는 것을 그 자체를 아는 것이 중요하다기보다 


객체는 설계를 필요로 하는 좀더 구조를 갖춘 프로그램의 작성 도구로서 이해합니다. 


아~ 자바 언어도 모르는데 (설계)를 해야 한다구요? 


당연히 하셔야 합니다. 프로그래머는 궁극적으로 자기가 맡은 부분의 설계를 할 수 있어야 합니다. 대부분의 회사에서 아키텍트 혹은 테크 리드(tech. lead)를 두고 있지만 기술 리더가 어떤 생각을 하고 있는지, 그리고 프로젝트에서 어떤 사상을 지켜나가고자 하는지는 같은 설계자의 입장에서 이해하고 동조하고 때로는 비판적인 의견을 낼 수 있어야 합니다. 


알고리즘을 잘 작성하고 많은 라이브러리를 잘 알고 

성능을 튜닝하는 것도 전문적인 영역으로 매우 중요하지만 


결국 개발자는 (설계자)가 되어야 합니다. 그래야 자기 생각을 담은 코드를 만들 수 있습니다. 


서론이 길었습니다만.. 자바 언어는 다음과 같은 객체 요소들을 제공합니다. 

1) class 

2) 접근제어자: public, private, protected, default 

3) static 키워드 

4) 맴버변수, 메서드

5) 상속 

6) 추상 클래스 

7) 인터페이스 

8) 합성 (composition, 상속하지 않고 다른 객체의 기능을 활용하는 방법) 

9) 오버로딩, 오버라이딩 

10) 객체 생성 (new 키워드) 

등등... 


이런것들을 모두 알아야 온전하게 객체로 프로그램을 설계하고 구현할 수 있습니다. 

와우 T_T 

적어놓고나니 (혹시 빠진 것들도 있겠죠) 정말 많네요. 앞서 절차지향적인 자바에 비해 훨씬 더 배워야 하는 것들이 많아졌습니다. 각 개념을 이해하는 것도 어려운데 그것을 실무에서 활용하려면 더 쉽지 않겠네요. 


다음 편에서는 앞서 설명한 객체지향 프로그래밍 언어의 요소들을 

가장 이해하기 쉬운 순서로 (즉, 사전이해가 필요없는 순에서 사전이해가 필요한 순으로) 

개념을 나열해보도록 하겠습니다. 


제 설명의 목표는 어떻게 최소한의 설명으로 자바 언어의 객체지향적인 요소들을 설명할 수 있을지 입니다. 

재밌게 읽어주세요. 


감사합니다. 

2020.5.4 

매거진의 이전글 [Java] #2 첫번째 자바 코딩

매거진 선택

키워드 선택 0 / 3 0

댓글여부

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