Java 입문 - Java의 기본개념과 환경구축

3 분 소요

Java의 특징

  1. 범용 개발 언어 (General-Purpose Programming Language)

    다양한 도메인에서 여러가지 용도로 사용이 가능하다. (웹페이지 작성에만 사용되는 html과 반대)

    • JavaSE (standard edition) : standalone application 개발
    • JavaEE (enterprise edition) : 웹개발 (Servelt&JSP, EJB, JavaMail, JMS 등)
    • JavaME (micro edition) : 모바일 장치를 위한 환경
  2. 객체지향 (OOP; Object Oriented Programing)

  3. 풍부한 API (Application Programming Interface)

    • API = 미리 만들어서 제공해주는 라이브러리

    • 자바에서 미리 만들어서 제공해주는 classes 묶음: *.jar

      ⇒ JavaSE API = rt.jar

  4. 플랫폼 독립적 (Platform Independency)

    os, dbms, was 등에 상관없이 독립적으로 개발이 가능하다

    • OS: window, linux, mac, solaris…
    • DBMS: mysql, oracle, db2…
    • WAS (Web Application Server)

    특히 실행하려는 O/S (Operating System, 운영체제)에 따라 컴파일을 하는 방식을 다르게 해줘야 하는데, 자바의 경우 JVM(Java Virtual Machine)이 os와 Java 어플리케이션 사이의 가교 역할을 하고 운영체제에 맞게 코드를 머신코드로 번역해주어 개발환경과 실행환경의 차이를 조정해준다.

    • 자바 실행환경 (JRE: Java Runtime Environment) 구성
      • java.exe (실행명령어)
      • JRE = JVM + API
    • 자바 개발환경 (JDK: Java Development Kit) 구성
      • javac.exe (컴파일러)
      • java.exe (실행명령어)
      • javadoc.exe (api 문서 자동생성기)
      • jar.exe (클래스 묶음, *.jar, *.war, *.ear)
      • JDK = JRE + TOOLS (javac.exe(컴파일러) 등)

    그리고 compiled 방식과 interpreted 방식이 합쳐진 형태이기 때문에 독립성을 유지하면서 수행속도도 빠르게 가져갈 수 있다. (기존 c, c++ 등에 비해서는 느리지만 그래도 여전히 빠르면서도 운영체제 독립적)

  5. 동적 바인딩

  6. 멀티 쓰레드

    • OS가 아닌 자바 프로그램 내부적으로 스레딩을 제공
  7. 보안의 우수성

자바 버전 히스토리

  • 1.0, 1.1 : Java

  • 1.2, 1.3, 1.4 : Java2

  • 1.5 ⇒ 5.0, 1.6, 1.7, 1.8 : Java (Open Source)

  • 1.8.202 이후 버전: 유료화

  • ~ 현재 버전 16 까지 유료로 출시되어 있는 상태

  • OpenJDK : 1.8.202 이후에 나온 무료버전

    ⇒ 수업에는 유료화 전인 1.8.202 버전을 사용. 실무에서도 유료보다 1.8.202 이전 버전을 많이 사용하고 있기 때문에 유용하다.

자바의 작동방식

개발언어의 종류로 앞서 파이선을 공부하며 배웠듯이 컴파일 언어와 인터프리터 언어가 존재한다.

  1. Compiled 방식
    • c, c++, vb 등
      1. 소스코드 작성 (Hello.cpp)
      2. 컴파일 (Hello.exe, o/s lib 포함)
      3. 실행 (hello.exe, HELLO.exe, hello, …)
    • 장점: 수행속도가 빠르다
    • 단점: o/s에 종속된다
  2. Interpreted 방식
    • python, html, lisp 등
      1. 소스코드 작성 (hello.html, hello.py, …)
      2. 번역실행: 한줄 읽고 번역 실행
    • 전제조건: 번역기(interpreter)의 설치가 필요 (웹의 경우 브라우저)
    • 장점: o/s와 독립 (해당 운영체제에 맞는 번역기가 설치되어있어야함)
    • 단점: 수행속도가 느리다

그런데, 자바는 두가지 방식을 모두 사용한다. *.java 로 작성된 파일을 먼저 자바 컴파일러(javac)가 프로그램 실행 시점에 맞춰 바이트 코드로 쓰여진 *.class 파일로 변환해주고, 이걸 JVM의 인터프리터가 o/s에 맞춰서 머신코드로 변환해주는 것이다.

이렇게 함으로써 기존 c, c++ 의 컴파일 방식에 비해서 수행속도는 조금 느릴 수 있지만 여전히 다른 인터프리터 언어들과 비교했을 때 빠른 수행속도를 가지면서도 운영체제에 독립적일 수 있는 장점을 가지게 된다.

cmd를 통한 수동실행 순서

(1) 소스코드작성: HelloWorld.java

(2) 컴파일 :
명령프롬프트> javac HelloWorld.java => HelloWorld.class => (byte code: 바이트코드,o/s lib 포함하지 않음, 중간 단계의 기계어)

(3) 자바 번역실행 : JVM(Java Virtual Machine)
명령프롬프트> java HelloWorld

실행시 주의사항

  • 대소문자 구분
  • 자바 번역 실행시에는 확장자를 포함시켜서는 안됨
  • 소스코드에 반드시 아래 실행메서드가 존재해야함
    • public static void main(String[] args) {}

자바 프로그래밍 주의사항

자바로 소스코드를 작성할 때에는 다음 규칙들을 지켜주어야 한다. (=자바문법)

  • 대소문자 구분
  • 명령문의 끝은 “;” 세미콜론 표기
  • {} 짝을 이루어야 함
  • 줄맞추기 (실행이 안되는 것은 아니지만 가독성을 위해 필수)
  • 이름 명명규칙: 반드시 준수해야함

식별자 (identifier)

  • 식별자 = 이름

  • 클래스이름, 변수이름, 메서드이름, 패키지이름, 상수이름 등

  • 대소문자 구분

  • 이름 명명규칙을 준수해야함

  • 시작: 영문자, _(언더바), $ 사용가능

  • 숫자 조합 사용 가능, 그러나 숫자로 시작은 불가 (모든 언어 공통)

  • 길이 제한 없음

  • 이름은 의미가 있게 지정을 해야 이해하기가 좋다

  • 약어는 가능하면 전체로 지정 (가독성, 의미전달 분명)

    ⇒ 협업시 용어집을 제작해서 공유 (Data Dictionary)

  • 예약어 (Keyword) 사용불가

  • 공백 사용 불가

이름 명명규칙 (Naming Convention)

클래스이름, 변수이름, 메서드이름, 패키지이름, 상수이름 작성 방법

  • 클래스이름: UpperCamelCase (대문자시작+대문자시작)
  • 변수이름: lowerCamelCase (모두소문자+대문자시작)
  • 메서드이름: lowerCamelCase() (모두소문자+대문자시작), 동사로 작성하는 것이 의미전달에 좋다
  • 패키지이름: 모두소문자.모두소문자
    • 물리적, 폴더(디렉토리) 개념. 같은 종류의 클래스, 권한 제한 목적으로 분리하기 위한 개념
    • 트리구조 (계층적 구조)
  • 상수이름: 모두대문자_모두대문자, 고정값 (변경불가)
    • public static final 타입 상수명 = 상수값;

예약어 (keyword)

자바에서 사용목적이 정의되어 있는 식별자

  • 모두 소문자
  • 예, pulbic, class, static, void, if, for, do, while
  • 키워드이지만 지원하지 않음: const
  • 키워드는 아니지만 식별자로 사용하지 말 것: sizeof
  • 예약어처럼 사용하는 상수: true(1), false(0), null(어떠한 객체도 참조하지 않음)

댓글남기기