[Java] 자바 시작하기

yejubi1531·2022년 3월 29일
0

JAVA를 잡아보자!

목록 보기
1/5
post-thumbnail

모든것이 클래스 기반에서 동작해야 한다. 이것이 자바다.


프로그래밍이란 무엇일까?

  • 프로그래밍: 컴퓨터에게 일을 하도록 명령어를 만드는 것
  • 컴파일: 프로그램 언어를 컴퓨터가 알 수 있는 언어로 바꿔 주는 일
  • 컴파일러: 기계어로 번역해주는 프로그램, 자바를 설치하면 자바 컴파일러도 설치됨

JAVA를 사용하기 위해서는 뭐가 필요할까?

  1. JDK 설치
  2. IDE 설치
  3. 클래스, 함수, public, static에 대한 개념
  4. 실행하기

우선 개발환경을 세팅해보자.
개발환경이란 자바로 프로그램을 만들 수 있는 컴퓨터 환경을 말한다. 즉, 프로그램 소스를 작성하는 툴, 작성한 소스를 컴파일 하는 프로그램 등을 설치해야 한다.

JDK 설치

Java Development Kit 의 약자로, 자바 프로그램을 만들기 위해서는 누구나 이것을 설치해야 한다.

https://www.oracle.com/java/technologies/downloads/

★ 본인의 JDK 설치 디렉토리를 기억해 놓자.

JDK를 설치했다면 JDK가 설치된 디렉토리의 bin이라는 하위 디렉토리에 javac.exe와 java.exe 파일이 저장되어 있을 것이다.
혹시라도 java.exe 만 있고 javac.exe 가 없다면 JDK가 아닌 JRE를 설치한 것이므로 JDK를 다시 설치하자

JRE는 JDK보다는 작은 개념으로 Java Runtime Environment의 약자이다. 자바가 실행될 수 있는 최소한의 파일들이 설치되어있는 환경이라고 생각하면 된다. JRE에는 javac.exe와 같은 자바소스를 컴파일하기 위한 도구는 설치되지 않는다.

javac는 java compiler의 약어이다. 즉, 자바파일을 컴파일할 때 사용하는 것이 바로 javac.exe 파일이다. 컴파일이란 프로그래머가 작성한 소스코드를 컴퓨터가 이해할 수 있는 말(기계어)로 바꾸는 행위이다.

만약 우리가 MyProgram.java라는 자바 파일을 작성했다면 프로그램이 정상적으로 동작하는지 확인하기 위해 프로그램을 실행시키고 싶을 것이다. 자바로 작성한 파일을 실행하기 위해서는 두 번의 단계를 거쳐야만 한다. 하나는 .java 파일을 .class 파일로 바꾸어 주는 컴파일 단계이고 두번째는 .class 파일을 실행하는 단계이다. 이렇게 두 단계를 거치면 우리는 작성한 프로그램을 실행할 수 있다.

위 그림에서 Compiler는 javac.exe에 해당되고 Java VM은 java.exe에 해당된다. 위 그림을 순서대로 서술하면 다음과 같다.

  1. 소스코드(MyPrograme.java)를 작성한다.
  2. 컴파일러(Compiler)는 자바 소스코드를 이용하여 클래스 파일(MyProgram.class)을 생성한다. 컴파일 된 클래스 파일은 Java VM(Java Virtual Machine)이 인식할 수 있는 바이너리 파일이다.
  3. Java VM(JVM)은 클래스 파일의 바이너리 코드를 해석하여 프로그램을 수행한다.
  4. MyProgram 수행 결과가 컴퓨터에 반영된다.

자바는 왜 실행하기도 어려운 class라는 걸 만들어서 귀찮게 하는거야?!!

Java로 exe 프로그램을 만들 수 있는데 JVM이 exe에 포함되는 형식으로 가능하기 때문에 exe 파일이 무척이나 커진다.

자바는 JVM이라는 중간단계가 있으므로 C등의 언어보다 속도가 느리다.
하지만 한번 작성한 클래스 파일은 어떤 OS에서라도 사용할 수 있다는 장점이 있다.
한번 작성한 것을 널리 재활용하는 것이 자바의 가장 큰 특징이자 가장 큰 장점이라고 할 수 있다.

IDE 설치

Intergrated Development Environment의 약자로, 통합개발환경이라 부른다.

자바 프로그래밍을 도와주는 IDE 중 가장 많이 추천되는 툴은 'Intellij(인텔리제이)'이며 'eclipse(이클립스)'도 많이 사용한다.

Intellij or eclipse

클래스 파일을 실행할 때는 위와 같이 java 클래스파일명 과 같이 실행한다. 단, 클래스파일명에서 .class 확장자 부분은 제외하고 이름만 입력하여 실행해야 한다.

ex) java HelloWorld


  • package name은 소문자로 시작
  • Calss name은 대문자로 시작

자바를 쓰면 좋은 이유

  • 객체 지향 언어이기 때문에 유지보수가 쉽고 확장성이 좋다.
  • 프로그램이 안정적이다.
  • 풍부한 기능을 제공하는 오픈 소스이다.

자바의 특징

  1. 간단하다 (Simple)
  2. 객체 지향적이다 (Object-oriented)
  3. 인터프리터 언어이다 (Interpreted)
  4. 강력하다 (robust)
  5. 안전하다 (Secured)
  6. 플랫폼 독립적이다 (Platform independent)
  7. 멀티 쓰레딩을 지원한다 (Multithreaded)
  8. 동적이다 (Dynamic)

간단하다 (Simple)
자바는 C++에 가깝지만 훨씬 간단하다. 자바는 고급 언어들에 들어 있는 여러 가지 요소들 중에서 반드시 필요하지 않다고 생각된 부분들은 모두 제거했다.

객체 지향적이다 (Object-oriented)
자바는 숫자(int, float, long 등)나 논리값(true, false)을 제외한 거의 모든 것이 객체로 구성되어 있다. 실제로 자바는 Object 클래스에서 모든 클래스를 파생한다.

인터프리터 언어이다 (Interpreted)
자바는 정확하게 말하면 컴파일 언어인 동시에 인터프리터 언어이다. 자바는 먼저 텍스트 소스를 컴파일하여 2진 파일(클래스 파일)로 만든 다음 자바 런타임이 클래스 파일을 인터프리트하면서 실행한다. 먼저 시스템에 무관한 2진 파일을 만듬으로써 자바는 컴파일 언어에 가까운 속도와 시스템 독립성을 동시에 얻을 수 있었다.

강력하다 (robust)
자바는 포인터 연산을 지원하지 않는다. 이는 잘못된 주소를 가르킬 가능성을 사전에 없앤 것이다. 자바는 모든 메모리 접근을 자바 시스템이 관리하고 제한하며 또한 예외 핸들링을 하여 시스템 붕괴의 우려가 없다. 예를 들어 자바는 리소스 관리(garbage collection)를 하는데 사용이 끝난 리소스를 시스템이 메모리에서 삭제하는 방식을 채택하고 있어 메모리 누출에 대한 고민을 프로그래머가 할 필요가 없다.

안전하다 (Secured)
자바는 포인터 개념이 없고 유형 정의가 강고하여서 실행 전에 클래스 파일을 이용한 프로그램의 검사가 가능하다.

자바는 프로그램 작성 시 자료형 타입에 굉장히 민감하다. 이것은 마치 코딩할 때 잔소리꾼이 끊임없이 따라다니며 잘못된 코드를 작성하지 않게끔 도와주는 역할을 한다. 그래서 자바는 일단 컴파일만 되면 실행 시 오류가 발생하는 경우가 다른언어에 비해 현저히 낮다. 능숙한 프로그래머라면 자바의 이렇듯 유연성이 없는 고지식한 면을 싫어 할수도 있다.

하지만 자바의 이런 족쇄같은 타입체크는 코드를 매우 명확하게 만들어주는 힘이 있다. 컴파일이 되었다면 코드에 결정적인 문제는 없는 것이다.

플랫폼 독립적이다 (Platform independent)
자바의 실행 파일은 이진 코드(클래스) 파일이다. 따라서 자바 런타임이 설치된 시스템에서는 어디서나 자바 프로그램을 실행할 수 있다.

자바에는 많은 특징이 있지만 가장 큰 특징이라면 한번 작성한 프로그램은 os에 상관없이 어디서든 돌려볼 수 있다는 점일 것이다. 이것은 자바 프로그램이 Virtual Machine에 의해서 실행되기 때문이다. 처음에 이 방식은 Virtual Machine을 실행시켜서 프로그램을 돌려야 하기 때문에 좀 느리고 부담스러웠다. 하지만 지금은 하드웨어의 눈부신 발전과 여러 기술들의 개발로 이러한 단점들이 대부분 사라져버린 상태이다.

멀티 쓰레딩을 지원한다 (Multithreaded)
멀티 쓰레드를 지원할 경우 하나의 프로그램 단위가 동일한 쓰레드를 동시에 수행할 수 있다. 특히 자바는 멀티 프로세서 하드웨어를 지원하도록 설계되었으므로 멀티 CPU 시스템에서 높은 효율을 낼 수 있다.

동적이다 (Dynamic)
자바 인터페이스를 이용하면 하나의 모듈을 갱신할 때 다른 모듈을 모두 갱신할 필요가 없다. 이것은 인터페이스가 모든 인스턴스 변수와 도구의 실행문을 배제한 채 객체 간의 상호 작용을 정의하기 때문이다.

profile
노력하는 중

0개의 댓글