목차
1) 프로그래밍이란?
2) Java를 왜 쓰는걸까?
3) Java 실행 과정
4) Java 코드의 구조
1) 자바 프로그램의 골격과 구성
1) 프로그래밍이란?
컴퓨터 프로그램 만드는 일을 프로그래밍(programming) 이라 하고, 프로그램 만드는 사람을 프로그래머(programmer)라고 한다.
프로그래밍을 한다는 것은 컴퓨터가 일을 하도록 컴퓨터 언어로 명령을 만들고 컴퓨터로 하여금 그 명령을 실행하게 하는것을 말한다.
프로그램을 만든 후 프로그래밍 언어 문법에 잘 맞는지 확인하고, 컴퓨터가 이해할 수 있는 언어로 번역해야 한다.
이 과정을 컴파일(compile)이라 말하며 컴파일 작업을 하는 프로그램을 컴파일러(compiler)라고 한다.
즉 우리가 말하는 프로그램 이란 프로그램에 들어 있는 명령(소스 코드) 집합과 컴파일 된 결과물 까지 포함한 것이다.
2) Java를 왜 쓰는걸까?
자바는 1991년 제임스 고슬링을 비롯한 썬 마이크로시스템스 연구원들이 처음 개발했다. 그 당시에는 C언어와 C++언어를 많이 사용했었는데, 가전제품이나 휴대용 장치 등에 사용하는 소프트웨어를 만들기 위해 독립적으로 작동하는 더 안정된 프로그래밍 언어가 필요하다 생각하여 시작하게 되었다.
🧾 JAVA의 역사
1991년 sun사 Green Project 출범 - James Gosling을 주축으로 Oak 라는 인터프리터 개발
Oak 원래의 목표는 가전기기에서 사용할 목적- 하드웨어 독립적인 언어로 구상됨
1995년 : sun사와 netscape사 협약
1996년 : 자바 지원 netscape 2.0 발표
1997년 : jdk1.1 발표
1998년 : jdk1.2 발표 (Java2 라는 이름으로 규모를 갖춘 형태의 프로그램 언어로 자리매김)
2000년 : jdk1.3
발표 이후 : jdk1.4/ 5.0 / 6.0 / 7.0 /8.0 /11.0 /14.0 버전 발표
~ 2009년 4월 20일 제작사인 썬 마이크로시스템스
가 오라클 과 인수 합병됨에 따라 자바에 대한 권리 및 유지보수 또한 오라클로 넘어가게 되었다.
위 사진은 인기있는 프로그래밍 언어 순위인데, 1,2위를 다툴만큼 Java는 전세계적으로 인기를 받고있다.
(Go lang이 작년까지만 해도 10위권 밖이였는데 10위로 올라왔다..! 꼭 공부해보고 싶다 😆)
자 이제 본론으로 돌아와서, 자바를 왜 쓰는건지, 자바의 장점을 알아보자.
1. 운영체제가 독립적이다. (이식성이 높다.)
Write once, run anywhere
한번 코딩되어 컴파일 된 상태의 클래스 파일은 다시 수정하지 않고도 JVM이 설치되어 있는 시스템에서는 실행이 가능하다.
즉 MS 윈도우, 리눅스, 맥OS등 여러 운영체제에서 동일하게 실행이 가능하다.
예를 들어 윈도우 운영체제에서 C언어로 개발한 프로그램이 있다고 하자.
그 프로그램을 컴파일 하면 .exe 파일이 생성이 되는데, 이 파일은 윈도우 운영체제에 맞게 만들어졌기 때문에 리눅스 운영체제에서는 사용 할 수 없다.
해당 파일을 리눅스 운영체제에서 실행하려면, 리눅스 환경에서 다시 컴파일 하고 리눅스 운영체제에 맞는 실행 파일을 새로 만들어야 한다.
그러나, 자바에서는 프로그램을 만들고 컴파일 하게되면 .class 라는 파일이 생성이 된다.
이 파일을 바이트 코드라고 하는데 운영체제에 맞는 완벽한 기계어가 아닌 중간 기계어 이다. (완벽한 실행 파일이 아님)
이 바이트 코드를 실행하려면 운영체제에 맞는 자바 가상 머신(Java Virtual Machine : JVM) 이 필요하다.
운영체제에서 직접 실행하는게 아니라 가상 머신에서 먼저 실행하고, 이 가상 머신이 운영체제에 맞는 완벽한 실행파일로 바꾸어준다.
즉 .class파일을 만들어 두면 운영체제에 맞는 가상 머신을 이용하여 어느 환경에서나 실행 할 수 있다.
💡 JVM(Java Virtual Machine) 이란?
자바 프로그램 실행 환경을 만들어 주는 소프트 웨어.
자바 코드를 컴파일 하여 .class 바이트 코드로 만들면 이 코드가 자바 가상 머신 환경에서 실행된다.
현재 사용하는 컴퓨터의 운영체제에 맞는 자바 실행 환경 (Java Runtime Environment: JRE) 이 설치되어 있다면 자바 가상 머신이 설치 되어있는것이다.
2. 완벽한 객체 지향 언어 (Object-Oriented Programming language)
자바는 프로그래밍의 대세로 자리 잡은 객체 지향 프로그래밍언어(Object-Oriented Programming language : OOP) 중의 하나로 객체 지향 개념의 특징인 상속, 캡슐화, 다형성이 잘 적용된 순수한 객체 지향 언어라는 평가를 받고 있다.
OOP의 기본 컨셉은 프로그램 내에서 표현하고자 하는 실세계(real world)의 일들을 객체를 사용해서 모델링 하고, 객체를 사용하지 않으면 불가능 했던 일들을 쉽게 처리하는 방법을 제공한다는 것.
객체 지향 프로그래밍이란 일의 순서대로 프로그래밍 하는것이 아닌 여러 객체의 협력을 통해 프로그램을 구현하는 것 이다.
예를들어 어떤 회원이 쇼핑몰 사이트에 접속하여 상품을 주문하고 상품이 집까지 배송 되는 과정을 생각해 보자.
이때 회원, 상품, 주문, 배송 등이 객체가 된다. ( 객체란 프로그램의 대상을 뜻한다. )
즉 회원과 상품과 주문과 배송이라는 객체를 기반으로 각 객체의 상호 관계를 이용하여 프로그래밍 하는것이다.
객체 지향 언어로 프로그램을 잘 설계하면 유지보수도 쉽고 확장성이 좋다는 장점 또한 가지고 있다.
3. 멀티 스레드 지원
하나의 프로그램에서 여러 개의 실행 흐름을 만들고 실행 할 수 있다.
자바는 멀티스레드를 지원하여 메모리의 공유가 가능하면서 프로그램이 보다 효율적으로 실행될 수 있도록 해준다.
때문에 수행속도가 빠르고 요청에 응답하는 시간도 빨라졌다.
4. 풍부한 기능을 제공하는 오픈 소스
자바는 오픈 소스이고 자바를 활용한 오픈 소스가 이미 많이 개발되어 있으므로 이 오픈 소스들을 연동하여 더 풍부한 기능을 빠르게 구현 할 수 있다.
기존의 다른 언어에서는 특정 기능을 대부분 개발자가 직접 개발하여 사용했다.
자바에는 기본 기능을 제공하는 클래스뿐 아니라 자료 구조, 네트워크, 입출력, 예외 처리 등에 최적화된 알고리즘 라이브러리를 제공하는 자바 개발 키트(Java Development Kit; JDK)가 있다.
이 외에도 배우기가 쉽고 프로그램이 안정적이며 외부 포인터를 제거하고 내부적인 포인터를 사용 했다는 특징 또한 가지고 있다.
✔ 외부 포인터를 제거하고 내부적인 포인터를 사용 함
→ 겉으로 드러나는 포인터 변수를 완벽히 제거하고, 내부적으로 객체의 메모리 할당시에 무조건 동적으로 메모리를 할당시키는 방식
3) Java 실행 과정
컴퓨터 소스코드 입력 (.java) → 바이트코드(반기계어) 로 컴파일(javac.exe) → 바이트코드의 결과출력(.class)
프로그램의 실행 과정은 보통
컴퓨터에게 요청(Coding) → 통역(Compiling) → 결과 실행(Interpreting) 이 순서로 이루어 진다.
위에서 언급했던것과 같이 컴파일 작업을 하는 프로그램을 컴파일러라고 하는데, 이 컴파일러는 바이트 코드(반 기계어)로의 변환을 해준다.
컴파일러를 통해서 변환된 언어는 컴퓨터에게 넘겨져서 실행 할 수 있는 환경이 필요하게 되는데, 이때 그 환경을 인터프리터라고 한다.
이 인터프리터는 한 line씩 읽어서 실행이 된다.
자바에서는, 이 인터프리터의 기능을 자바 가상 머신이 수행하게 된다.
1. 정해진 규칙(자바언어)를 지켜야 하며
2. 컴파일 단계에서 오류가 없는지 확인 하고 최종 결과(바이트 코드)를 만들어 준다.
3. 컴파일러에서는 자바 바이트 코드 라는 컴파일 된 문서를 만들어주며
4. 자바 가상 머신을 가진 다른 전자제품에서 바이트 코드를 실행 시킬 수 있다.
- 소스 코드를 입력하고, javac 컴파일러로 컴파일한 다음, 컴파일된 바이트 코드를 자바 가상 머신에서 실행시키면 된다.
- 자바 가상 머신(Java Virtual Machine) – 바이트 코드를 해당 플랫폼에서 이해할 수 있는 형태로 해석하여 그 프로그램을 실행시켜 준다.
- 바이트 코드 – 플랫폼에 무관하게 사용할 수 있다.
4) 자바 코드의 구조
- 모든 자바 애플리케이션에는 최소한 클래스 한 개가 있어야 하며, 적어도 main메서드 하나가 있어야 한다.
- 자바에서는 모든 것이 클래스 안에 들어간다.
- 자바 소스코드는 클래스 안에 메소드가 속해있으며, 적어도 하나의 클래스와 메소드가 존재 해야하며 소스코드를 실행 한다는 것은 메인 메서드가 속한 클래스를 찾아서 순차적으로 실행한다는 의미이다.
import java.lang.*; //생략 가능한 패키지
public class Hello {
public static void main(String[] args) {
System.out.println("Hello JAVA!");
}
}
4-1) 자바 프로그램의 골격과 구성
클래스 이름이 Hello 이면, 컴파일시 생성되는 파일의 이름은 Hello.class 가 된다.
클래스명과 파일명은 동일해야 한다.(클래스 이름 Hello=> Hello.java)
System.out.println()
- 괄호안에 출력하고 싶은 것을 큰 따옴표로 감싸서 넣으면 출력이 된다.
- 출력을 한 다음에 행을 바꾼다.
System.out.println() 같이 컴퓨터에게 무엇인가 일을 시키는 문장을 '명령문'이라 하고,
이러한 명령문의 끝에는 반드시 세미콜론(;)을 붙여서 명령문의 끝을 표시한다.
package
- 비슷한 유형의 클래스들끼리 묶어서 관리
- 해당 package 내에 있는 클래스를 사용하려면 import 라는 예약어 를 사용한다.
import 패키지명.클래스명;
- 위의 코드블럭에서 보면 import java.lang.*; 라고 적혀있는데, 이는 java 패키지 내의 lang 패키지 안의 모든 클래스를 현재 파일에서 사용할 수 있도록 하겠다는 뜻이다.
클래스
- 여러 개의 클래스를 하나의 파일에서 사용할 수 있다.
- public 이라는 예약어를 사용할 수 있는 클래스는 하나 뿐이다.
- 클래스 모두가 public 을 사용하지 않아도 되지만, public 을 사용하려면 그것은 하나여야 하고, public 이 붙을 수 있는 클래스는 파일명과 동일해야 한다.
- main() 메서드는 파일명과 동일한 클래스내에 있어야한다.
( https://www.youtube.com/watch?v=-KXFcAlXixk&list=PLq8wAnVUcTFV4ZjRbyGnw6T1tgmYDLM3P&index=6 )
⇒ C++ 과 비교했을때의 자바언어의 특징은
간결성
언어에 컬렉션 포함
완전한 객체지향 언어
이렇게 세가지로 볼 수 있다.
다음은 잠깐 언급했던 자바가상머신(JVM)에 대해서 포스팅을 하도록 하겠습니다.
'Programming > Java' 카테고리의 다른 글
String s = "test"와 String s = new String("test")의 차이점 (0) | 2021.04.24 |
---|---|
Map.getOrDefault(Object Key, Integer defaultValue) (2) | 2021.04.18 |
Stack과 Queue (4) | 2021.04.13 |
자바 가상 머신(JVM)의 메모리 구조 (2) | 2021.03.25 |
JDK 환경변수 설정 (0) | 2021.03.03 |