IT 공부 독서 정리/Java의 정석

자바의 정석 Chapter 1 - 자바 개발환경 구축하기 [MAC]

방탄승 2024. 12. 1. 19:46

1. 자바 개발환경 구축하기

  1.1 JDK란 무엇인가?

  • JDK(Java Development Kit)는 자바 프로그래밍을 위해 필요한 개발 도구의 모음이다.
  • 쉽게 말해, 자바 프로그래밍을 가능하게 해주는 소프트웨어 도구라고 이해하면 된다.
    예를 들어, 이미지를 편집하기 위해 포토샵을 사용하는 것처럼, 자바 프로그램을 만들기 위해서는 JDK가 필요하다.

  1.2 JDK의 구성

  • JDK에는 다음과 같은 중요한 도구들이 포함되어 있다:
    • API 라이브러리: 코드 작성 시 활용 가능한 다양한 기능 제공.
    • JVM(Java Virtual Machine): 자바 코드를 실행하기 위한 가상 머신.
    • 그 외, 컴파일러와 디버깅 도구 등이 포함.

JDK 구조

 

기본적으로 책에서 설명하는 JDK 설치는 윈도우 기반으로 설명을 함.

다만, 개발용 PC로 맥북을 사용중이라, 맥 OS 기준으로 작성함.

 

  1.3 JDK 버전과 사용 경험

  • 현재 JDK는 23버전까지 업데이트되었으며, 거의 매년 새로운 버전이 출시됨.
  • 과거 JDK 1.8이 가장 널리 사용됨. 그 이유는 안정성과 기능적 효율성 때문.
  • JDK 1.8 이전 버전들에서는 볼 수 없었던, 다양한 기능과 개념들이 추가 됨.
    • JDK 1.8에서 도입된 주요 기능:
      • 람다식(Lambda Expressions)
      • 함수형 인터페이스(Functional Interface)
      • Stream API
      • 새로운 날짜/시간 API(Date & Time API)
      • JVM 변화
      • 병렬 배열 정렬 (Parallel Array Sorting)
      • 컬렉션을 위한 대용량 데이터 처리 (스트림)
      • Optional
      • Base64 인코딩과 디코딩을 위한 표준 API
      • 새로운 날짜, 시간 API (Date & Time API)
    • 이후 버전은 큰 변화가 없었기 때문에 기업들은 주로 JDK 1.8을 유지하며 사용 함.
    • 다만, 스타트업 회사 등 새롭게 시작하는 회사들이나 신규 프로젝트들은 그 이후 버전을 사용 함.

  1.4 JDK 설치

  • Windows: JDK를 설치한 후, 환경변수 설정이 필요하다.
  • Mac OS: 설치 후 바로 사용 가능(환경변수 설정 불필요).

2. JAVA 프로그램 작성하기

  2.1 코드 작성 도구(IDE) 선택

  • 자바를 개발하려면 텍스트 편집기 또는 IDE(Integrated Development Environment)가 필요하다.
  • 자주 사용되는 도구:
    • Eclipse: 무료, 자바 특화 도구.
    • IntelliJ IDEA: 직관적 UI와 강력한 기능으로 인기.
    • Visual Studio Code: 다양한 언어 지원.

  2.2 Hello, World 출력하기

class Hello {
    public static void main(String args[]) {
        System.out.println("Hello World !!!");
    }
}

  위 코드는 Hello, World라는 문구를 출력하는 코드임.

  모든 프로그래밍 언어를 시작할 때 단골로 사용되는 예제

  우선 객체지향 프로그래밍의 기본 단위는 클래스를 기반으로 진행 됨.

  코드 구조

  1. 클래스 선언: Hello라는 클래스를 선언.
  2. main 함수: 자바 프로그램의 시작점.
  3. 출력 메서드 호출: System.out.println()을 사용해 "Hello World!!!" 출력.

  위 3가지 구조를 통해 실제 "Hello, World!!!" 라는 문구를 출력할 수 있다.

  2.3 Java 프로그램 실행 과정

Hello.Java작성 → Javac.exe → Hello.class 생성 → Java.exe → "Hello, World!!!" 출력
  • 소스 파일 작성:Hello.java라는 이름의 파일에 소스코드를 작성.
  • 컴파일:javac Hello.java 명령을 실행하면, Hello.class라는 바이트코드 파일이 생성됨.
  • 실행:java Hello 명령을 통해 JVM이 Hello.class를 실행.
  • 결과:콘솔에 "Hello World!!!" 출력.

  위 소스코드 및 실행과정은 Command 창에서도 간단하게 테스트가 가능함.

 

윈도우 Command창에서 Javac를 통해 컴파일 및 실행하는 과정

 

3. IntelliJ에서 Hello World 실행하기

  3.1 IntelliJ 실행 과정

  1. 소스 파일 위치:
    • src/com/example/hello/Hello.java에 소스코드 작성.
  2. 클래스 파일 생성:
    • IntelliJ가 내부적으로 JDK를 사용해 Hello.class 파일 생성.
    • 위치: build/classes/java/main/com/example/hello/Hello.class
  3. Java.exe로 실행:
    • IntelliJ는 JDK의 Java.exe를 사용해 프로그램을 실행.
    • main 함수가 실행되며, "Hello World!!!" 출력.

intellij에서 Hello World!!! 출력한 모습

실행 시 유의점

  • main 함수 필수:
    • 자바 프로그램은 main() 함수가 없으면 실행되지 않으며, 아래와 같은 에러가 발생함. 
      Exception in thread "main" java.lang.NoSuchMethodError: main
    • 자바 프로그램은 기본적으로 하나의 프로젝트 안에 1개의 Main함수가 반드시 존재해야 한다.
    • Main 함수는 모든 프로젝트의 시작점이라고 생각하면 된다.
    • 자동차를 이용하기 위해 시동은 걸어야 무엇이든 할 수 있는것과 마찬가지임.

4. 주석

  • 컴파일과 기계어 번역이 이루어지지 않은 코드
    • 프로그램을 작성하는 과정은 크기가 커질수록 프로그램 유지보수 및 추가 개발에 어려움이 발생함.
    • 하나의 프로그램을 개발하는 동안, 다양한 클래스 및 메서드들이 작성됨.
    • 혼자 개발한다고 할지라도, 그 모든 클래스와 기능들을 머릿속으로 기억하기란 쉽지 않음.
    • 또한 실무에서는 팀단위로 개발하는 작업들이 많아, 모든 내용들을 매번 회의를 통해 공유하기도 어려움.
    • 위와 같은 문제들을 해소하기 위해 만들어진 기능이 주석.
    • 컴파일과 관련 없는 구문이라, 코드에 대한 설명이나 개념들을 작성하여 가독성을 높일 수 있음.
    • 또한 해당 프로젝트의 버전이나 변경 이력들을 작성할 수 있다는 이점이 있음
      • 범위 주석 : '/*'와 '*/' 사이의 내용은 주석으로 간주
      • 한 줄 주석 : '//' 부터 라인 끝까지의 내용은 주석으로 간주
  • 더보기
    주석 예시
    /*
        Date     : 2024. 12. 08
        Source : Hello.java
        Author  : 신지훈
        Email    : tho881@naver.com
    */
        class Hello 
        {
            public static void main(String args[]).   /* 프로그램 시작*/
            {
                    System.out.println("Hello, World!!!");  // Hello, World!!!를 출력 
                    System.out.println("//주석 아님");  // "//Hello, World!!!"를 출력
                    System.out.println("/*이것도 주석 아님 */");
        
        }
        }
      

5. Hello World 요약 

  • 이것으로, JDK를 통해 가장 간단한 Hello, World!!!문구를 출력하는 프로그램을 개발함.
  1. JDK 설치는 필수: 자바 개발을 위해 JDK는 반드시 필요
  2. JDK 버전 선택: JDK 1.8 이상 버전은 안정성과 효율성으로 현재도 널리 사용됨. (1.8 이상 추천)
  3. IDE 활용: IntelliJ, Eclipse와 같은 도구를 사용하면 자바 개발이 편리.
  4. 코드 실행 과정: 소스코드 → 컴파일 → 클래스 파일 생성 → JVM 실행 → 결과 출력.
  5. Hello, World 예제: 자바 프로그램의 기본 구조와 실행 과정을 이해하는 데 적합한 예제.

6.  Java 개발에서 자주 발생하는 에러 종류

  * 이 책에서는 자주 발생하는 오류들을 소개하며, 해당 오류 발생 시 확인해야 할 부분을 알려주고 있다.

에러 코드 및 내용 에러 설명
cannot find symbol 또는 cannot resolve symbol 변수나 메서드를 찾을 수 없을 때 발생하는 에러 
';' expected 세미콜론 ';'이 없을 때 발생하는 에러
Exception in thread "main"
java.lang.NoSuchMethodError: main
main 메서드를 찾을 수 없을 때 발생하는 에러
Exception in thread "main"
java.lang.NoClassDefFoundError : Hello
Hello라는 클래스를 찾을 수 없을 때 발생하는 오류
illegal start of expression 문장의 앞부분이 문법에 맞지 않다는 뜻
해당 문장의 문법적 오류가 발생했을 때 나타나는 오류
class interface, or enum expected class나 interface 또는 enum이 없을 때 발생하는 오류
보통 '{', '}'등의 중괄호 개수가 불일치 할 때 발생한다.
  • 이 외에 오류의 내용은 매우 다양하게 나타 남.
  • 다만, 이클립스 및 인텔리제이 등 개발 IDE 툴을 이용하면 에러 및 경고에 대한 다양한 이점이 있음.
    • 에러가 발생한 소스 코드 파일에 대한 정보를 표시
    • 해당 파일을 열면, 소스 코드 내의 어느곳에 에러가 발생하였는지 표시
    • 에러에 대한 내용과 더불어, 어떻게 수정하면 좋은지에 대한 피드백도 제공
    • 최근 생성형 AI 플러그인을 통해 해당 오류들에 대해서 자동으로 수정할 수 있는 기능도 제공

7.  Chapter별 수업 내용

  •  이 책은 크게 3부분으로 나뉘어 1~5장 / 6~9장 / 나머지 부분으로 구분할 수 있다.
    • 1~5장까지는 자바의 기초 문법에 대해서 다룬다.
      • [이 부분을 확실하게 공부를 하게 되면, 다른 언어를 공부할 때도 도움이 많이 된다.]
    •  6~9장까지는 자바의 가장 큰 특징인 객체지향 프로그래밍에 대해서 다룸.
      • [상속, 다형성, 캡슐화, 예외처리, 인터페이스 등등]
    • 10~마지막장까지는 자바 프로그래밍을 실제로 응용하는 부분을 다룸.
      • [스트림, 람다, 네트워크, 쓰레드 등등]
Chapter 내용
1장 자바를 시작하기 전에...
2장 변수 (Variable)
3장 연산자 (Operator)
4장 조건문과 반복문
5장 배열 (Array)
6장 객체지향프로그래밍 I
7장 객체지향프로그래밍 II
8장 예외처리 (Exception)
9장 java.lang패키지와 유용한 클래스
10장 날짜와 시간 & 형식화
11장 컬렉션 프레임웤
12장 지네릭스, 열거형, 애너테이션
13장 쓰레드 (Thread)
14장 람다와 스트림
15장 입출력 (I/O)
16장 네트워킹 (NetWorking)

 

8. 정리

  • 이 글에서는 JDK 설치와 Hello, World 출력 과정을 중심으로 기본 구조를 파악 했음.
  • 기본적인 코드 작성법 및 자바 실행과정과 더불어 코드 작성에 필요한 주석의 개념이 책에 주된 내용
  • 또한 자바에서 기본적을 많이 발생하는 오류코드 및 설명에 대해 소개함.
  • 자바 언어의 기본적인 문법과 객체지향 프로그래밍 개념은 이어서 단계적으로 정리해볼 예정
  • 이 책에서 챕터별 주제에 대해 간략하게 소개하면서 1장의 내용이 마무리