1. 개요
우리는 흔히 자바를 객체 지향 프로그래밍이라고 한다. 객체란 복합적인 데이터를 포함한 하나의 사물 혹은 대상을 말한다.
2. 프로그램이란 무엇인가?
프로그램은 본래 그리스어로 '계획'이라는 단어이다. 계획이란 어떠한 문제나 일을 순서대로 진행하는 일련의 과정이다.
현재 일반적으로 사용하는 프로그래밍이라는 단어는 '기계'가 구동할 수 있도록 일련의 '규칙'과 '계획'을 규정하는 과정을 말한다. 쉽게 말해, 프로그램은 컴퓨터 시스템에 내리는 명령어들의 집합으로 '작업 실행'을 위해 내린 명령들을 말한다.
프로그램은 특정 결과를 기억하도록 명령어로 입력하고 계산 결과(혹은 기능)를 출력 장치 (모니터)에 표시되도록 하는 기능을 가진다. 이러한 프로그램은 인간이 기계어에게 명령어를 입력하는 것이다. 기계어는 기본적으로 0과 1로 구성되어 있고, 기계는 0과 1의 조합으로 프로그램을 구동한다. 하지만 인간은 이러한 기계어를 기계에게 직접 전달하지 않는다.
프로그래밍 언어는 기계어를 인간이 보기 쉽게 만든 일련의 언어이다. 결국 프로그램을 구성한 언어를 기계어로 변경해야한다는 것이다.
아래 예시와 같이 일련의 규칙이나 정보를 정의하고 과정을 지정해 주어야 한다.
//3과 5를 더해라
//결과를 계산하라
//계산 결과를 모니터에 출력하라
int a = 3;
int b = 5;
int c = 0;
c = a+b;
System.out.println(c);
알아두기: 프로그램은 결국 기능을 구현하기 위해 구성한 다양한 데이터들의 집합이다.
또한, 하드웨어는 이러한 소프트웨어를 구동하는 모든 기계 장치를 말한다.
컴퓨터, 스마트폰, 공기 청정기 등 하드웨어는 인간 생활에 실제 물질로 존재하는 것들을 말한다.
3. 프로그램의 종류
OS (Operating System)는 하드웨어를 사용하고 구동시키는 소프트웨어이다. Windows 나 Mac 이 대표적이다. 해당 소프트 웨어에서 특정 목적을 위해 구조된 프로그램을 응용 소프트웨어라고 한다. 우리가 사용하는 대부분의 소프트웨어는 OS에서 구동되는 응용소프트웨어이다. 응용소프트웨어는 Browser, game 등 다양한 종류가 있다.
물론 기계 자체에 구성된 임베디드 시스템도 존재하지만 현재 '프로그래밍'을 한다는 대표적인 예제는 응용 소프트웨어를 만들거나 응용 소프트웨어에 추가하는 기능이나 바탕 기술을 구성하는 것이다.
4. 컴파일 (compile)은 무엇인가?
프로그램을 구동하기 위해서는 소스 코드를 기계어로 변경하는 과정이 필요하다. 일련의 명령어를 기계어로 번역해주는 단계를 거쳐야만 인간이 작성한 소스코드를 기계가 이해하고 수행할 수 있다. 이러한 과정을 컴파일이라고 하며 컴파일을 진행하는 프로그램을 컴파일러라고 한다.
자바는 컴파일 과정에서 소스코드를 바이트코드(.class) 로 변경한다. 자바 이전에 사용하던 언어들과 다르게 곧바로 기계어로 번역하지는 않는다. 자바의 컴파일 과정은 JVM이라는 구문해석기를 이용하는데, 자바로 제작한 소스코드를 해석하고 이를 기계어로 변경한다.
컴파일러가 독립적으로 존재하는 특성에 의해 자바 언어는 운영체제에 관계없이 해석 및 적용이 가능하다. 본래 코드의 적용은 각 운영체제에 따라 구성이나 단계가 변하는데 이는 컴파일 과정에서 독립적인 구문 해석기가 없이 OS를 통해 곧바로 기계어로 번역하기 때문이다.
다만 자바는 이러한 컴파일 과정에서 JVM이라는 독립적인 기계어 해석기를 가져 다른 운영체제도 JVM을 통한 바이트 코드 해석이 된다면 소프트웨어를 구동할수 있다. 이러한 자바의 특성 때문에 플랫폼(운영체제)에 독립적으로 존재할 수 있다.
5. 객체 지향 프로그래밍과 자바의 특징
일반적으로 구조적 프로그래밍은 각 단계에 따라 지정한 과정과 결과를 출력한다.
자바와 같은 객체지향 프로그램은 특정 대상에 포함되는 다양한 속성(정보; 데이터)을 객체로 지정하고, 이 객체를 이용하여 프로그램을 구성한다. 쉽게 말해, 구조적 프로그래밍이 순서에 따라 처리되는 방식이라면, 객체지향 프로그래밍은 순서 보다는 접근하는 대상(객체, Class)에 따라 프로그래밍이 처리되는 것이다.
다만 이는 출력과정에서 해당 데이터에 대한 속성을 분류하고 출력하는 것이지, 구조적 프로그래밍을 사용하지 않는 것은 아니다. 정확하게는 해당 데이터에 포함된 속성을 구조적 프로그래밍을 구축한 뒤에 객체에 대한 정보로 분류하는 것이다.
해당 객체지향프로그래밍이 용이한 이유는 속성에 따른 데이터 지정을 하기 때문이다. 이는 구축한 데이터의 관리와 수정이 쉬운데, 구조적 프로그래밍은 동일한 명령은 모두 수정해야 프로그래밍이 구동되지만, 객체지향프로그래밍은 해당 객체의 속성 코드만 변경하면 프로그래밍이 구동되기 때문이다. 각 분류가 사물(객체)에 초점되어 있어 처음 지정한 데이터를 수정하면 프로그램에 전체적으로 적용할 수 있는 것이 특징이다.
요즘 추세는 함수형 프로그래밍을 많이 사용한다. 이는 객체지향에서 발전한 형태로 객체 속성에 대해서 특정 값을 입력한다면 그에 맞는 값을 출력하는 형태이다.
중요: 컴파일러의 경로 및 지정이 안되면 자바 명령이 작동하지 않는다.
설치한 컴파일러를 기억하고 이에 맞게 선택하자. 이클립스는 기본적으로 오라클 경로를 지정하고 있어 줄루사용시 꼭 컴파일러를 지정해줘야한다.
(new > JRE 선택에 Use default jre 'zulu-15' and workspace compiler preferences)
6. 그래서 객체 지향이 왜 좋은걸까?
객체 지향에 대해서 이해하려면 이전 프로그래밍의 구조와 정보를 이해할 필요가 있다. 이전에 사용하던 프로그래밍은 목록에 따라 순서대로 각 정보가 처리되고 연산되는 과정을 거쳤다. 각 정보다 독립적으로 존재하는 것이 아니라 특정 입력과정에 따라 순차적으로 정보가 처리되고 출력되는 방식이었다. 때문에 해당 과정에서 특정 명령어나 정보를 대입하면 이와 관련된 모든 과정의 수정이나 동일한 코드를 수정하여야 했다.
하지만 객체지향 프로그래밍은 해당 과정에서 특정 사물이 갖는 정보를 분류해두고 사물에 따라 독립적으로 저장하였다. 때문에 구조적 프로그래밍처럼 특정 정보를 위해 모든 과정을 반복하는 것이 아니라, 해당 속성에 해당하는 정보만 이해하고 출력하는 것이 가능하다는 것이다.
'Java > 기본 이론' 카테고리의 다른 글
[JAVA] Chapter 06. 데이터 영역의 이해 (0) | 2021.04.23 |
---|---|
[JAVA] Chapter 05. 변수 - 데이터 타입과 형변환 (0) | 2021.04.23 |
[JAVA] Chapter 04. 데이터의 기본이해 (0) | 2021.04.23 |
[JAVA] Chapter 03. 변수와 자바 기초 문법 (0) | 2021.04.22 |
[JAVA] Chapter 02. Hello World! (0) | 2021.04.22 |