1. 자바란?

    객체지향 프로그래밍(OOP, Object Oriented Programming Language) 언어이다.

  2. 자바의 특징

    1. 운영체제(OS)에 독립적이다.

      자바 응용프로그램은 자바가상머신(JVM, 컨테이너)하고만 통신하고 JVM이 자바 응용프로그램으로 부터 전달받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달한다.

      자바로 작성된 프로그램은 운영체제에 독립적이지만, JVM은 운영체제에 종속적이다.

    2. 객체향 언어이다.

    3. 자동 메모리 관리(GC, Garbage Collection)

    4. 동적 로딩이 가능하다.

  3. 자바 개발도구(JDK, Java Develop Kit)

    1. JRE

      1. 자바 애플리케이션에 필요한 API와 기타파일
      2. JVM
        1. Java Compiler

          *.java 파일을 *.class라는 Java Byte Code 변환해주는 역할을 수행한다.

        2. *.class파일은 기계어가 아니기 때문에 OS에서 바로 실행되지 않고 JVM에서 실행되고 JVM이 OS가 ByteCode가 이해할 수 있도록 해석 해준다.

    2. 자바 개발에 유용한 도구

      JRE는 Java API Library와 Java Class Loader, JVM이 포함되어 있다.

클래스패스(Class Path)

클래스를 찾기 위한 경로를 말한다. JVM이 자바 어플리케이션(프로그램, ex. SpringBoot)을 실행할 때, 클래스 파일을 찾는데 기준이 되는 파일 경로를 말한다.

  1. 소스 코드(.java)를 컴파일하면 바이트 코드(.class)로 변환된다.
  2. java 또는 jre 로 바이트 코드 파일을 실행하면 해당 class 파일을 찾는다.
  3. 이 때 바이트 코드(*.class) 파일을 찾을 때 classpath에 지정된 경로를 사용한다.

소프트웨어 개발에서 실행 가능한 애플리케이션으로 만드는 작업은 정형화 되어 있다. 자바 애플리케이션 개발을 예로 들면 다음과 같은 일련의 작업들이 필요하다.

작업 목록

  1. 코딩 규약에 맞게 작성했는지 확인
  2. 코드를 정적으로 해석
    1. 타입 확인
  3. 소스코드(.java)를 컴파일해서 클래스 파일(.class)을 생성
  4. 테스트를 하고 테스트 결과나 커버리지 측정 결과를 리포트로 출력
  5. javadoc과 같은 문서 작성
  6. 클래스 파일과 리소스 파일을 패키징해서 압축 파일 생성(.jar or .war)
  7. 압축 파일을 테스트 환경이나 스테이징 환경에 배포
  8. 압축 파일을 저장소에 등록

빌드 도구(Build Tool)

  1. 정의
    1. 위에서 이야기한 정형화된 작업을 자동화하기 위한 소프트웨어로 빌드 도구을 사용하지 않고 빌드 과정을 수동으로 진행한다면 여러가지 문제가 발생할 수도 있다.
      1. 빌드 및 배포 과정에서 많은 시간적 리소스가 투입된다.
      2. 변경 사항이 반영되지 않은 메뉴얼
      3. 환경 의존성의 미적용
      4. 무한 라이브러리 지옥
    2. 소프트웨어 개발에 있어서 소스 코드를 실행 가능한 애플리케이션으로 만들어주는 도구를 말한다. 빌드 과정을 자동화하여 관리하는 기능을 하기 때문에 빌드 관리 도구 또는 빌드 자동화 도구라고 불리기도 한다.
  2. 특징
    1. 개발자가 스크립트를 작성하여 다양한 작업을 수행할 수 있게 한다. 예를 들어 소스 코드를 컴파일하거나 패키징할 수 있으며, 테스트를 자동으로 수행하거나 의존성 주입 및 배포 작업을 할 수 있다.

그레이들

  1. 정의

    1. 빌드 도구 중 하나의 오픈소스
  2. 스크립트 작성법

    1. Gradle 프로젝트에서는 build.gradle이 핵심 파일이다.
  3. 변수

  4. 변수란?

    컴퓨터 언어에서 변수란, 값을 저장할 수 있는 메모리상의 공간을 의미한다. 변수를 사용하기 전에 먼저 변수를 선언해야한다.

    변수가 선언되면 메모리에 변수의 타입에 알맞은 크기의 저장공간이 확보되어, 값을 저장할 준비가 된다.

    변수 선언 방법은 변수의 타입과 이름을 함께 작성해주면 된다. 단, 변수타입은 변수에 담을 값의 종류와 범위를 충분히 고려하여 결정해야 한다.

    //선언방식: 변수타입 변수이름;
    int number=0;
    int a=1, b=2;
    

    변수를 사용하기에 앞서 적절한 값을 저장해주는 것이 필요하다. 이것을 변수 초기화 라고 한다. 변수 초기화를 하지 않는다면 쓰레기 값이 들어가기 때문에 적절한 값을 초기화 하는 것이 중요하다.

  5. 명명 규칙(Naming Convention)

    변수의 이름, 메서드의 이름, 클래스의 이름 등 모든 이름을 정의할 때는 반드시 지켜야하는 규칙이 있다.

  6. 변수 타입(Type)

모든 변수는 타입이 있으며, 타입에 따라 저장할 수 있는 값의 종류와 범위가 결정된다.

변수의 타입은 크게 기본형(Primitive Type)과 참조형(Reference Type) 2가지로 나뉜다. 기본형은 실제 값(data)을 저장하는 반면, 참조형 변수는 어떤 값이 저장되어 있는 주소 값을 저장한다.

<aside> 💡 기본형(Primitive type)

</aside>

3.1 기본형(primitive type)

기본형에는 크게 논리형, 문자형, 정수형, 실수형 총 4가지로 구분한다.

<aside> 💡 리터럴(Literal)

</aside>

  1. 연산자

연산자는 프로그래밍 언어에서 가장 기본적이면서도 중요한 요소이다. 각 연산자의 특징과 실행결과, 그리고 우선순위에 대해서 잘 알고 있어야 한다.

  1. 연산자 우선순위

    Operator

  2. 제어문

  3. 배열

같은 타입의 여러 변수를 하나의 묶음으로 다루는 것을 '배열(Array)'이라고 한다.

  1. 배열의 특징

    배열은 길이만큼 요소들을 가지고, 각각의 요소는 인덱스(Index)와 값(Value)를 가진다.

    인덱스는 해당 요소에 접근하여 을 선택(Select) / 수정(Modify) / 삭제(Delete)를 할 수 있다.

  2. 배열의 선언

    원하는 타입의 변수를 선언하고 변수 또는 타입에 배열임을 의미하는 대괄호[ ]를 붙이면 된다. 대괄호는 타입 뒤에 붙여도 되고 변수이름 뒤에 붙여도 되지만, 가능하면 타입의 뒤에 붙이는 것이 좋다.

    int[] score;
    String[] students_name;
    
  3. 배열의 생성

    배열을 선언 후, 생성 해야 한다. 배열을 선언하는 것은 단지 생성된 배열을 다루기 위한 참조변수를 위한 공간이 만들어질 뿐이다. 배열을 생성해야 비로소 데이터를 저장할 수 있는 공간이 만들어진다.

    int [] score;
    score = new int[5];
    // or
    int[] score = new int[5];
    
    1. 배열의 생성 단계

      1. int[] score;

        int 형 배열 참조변수 score를 선언한다. 데이터를 저장할 수 있는 공간은 아직 할당되지 않았다.

      2. score = new int[5];

        연산자 'new'에 의해서 메모리의 빈 공간 5개의 int 형 데이터를 저장할 수 있는 공간이 할당된다. int 형의 Default 값인 0으로 초기화 된다.

        마지막으로 대입연산자('=')에 의해 배열의 주소가 int 형 배열 참조변수 score에 저장된다.

    2. 배열의 값 초기화 방법

      1. 배열의 각 요소를 하나씩 값을 할당한다.

        String[] students_name = new String[3];
        students_name[0] = "Kim";
        students_name[1] = "Yoo";
        students_name[2] = "Lim";
        
      2. 배열의 크기는 따로 지정하지 않고, 바로 초기화를 선언한다.

        // 배열의 크기는 3이고, 각각의 요소는 할당한 값으로 초기화 된다. 
        String[] students_name = {"Kim", "Yoo", "Lim"};