2021-11-29 수업내용정리

범고래·2021년 11월 29일
0

비트캠프 수업내용

목록 보기
4/20

(1) gradle과 플러그인

  • build.gradle이 있어야 gradle 관련 명령어가 작동하므로 $gradle init을 사용해서 만들어준다.
    app/
    app/src
    app/build.gradle
    settings.gradle
    등등이 폴더 하위에 만들어진다.

  • 그 후, build.gradle에 플러그인을 넣어서 gradle이 이클립스에서도 작동 가능하게끔 한다.
    기본 작업 외에 특정 작업을 실행시키고 싶으면, 그 작업에 대한 명령어가 들어 있는 플러그인을 추가하여야 한다.

plugins {
    id 'java'  // 자바 관련 작업을 수행할 수 있도록 
    id 'eclipse'// 아클립스 관련 설정파일을 생성할 수 있도록
}

repositories {
    mavenCentral()
}

dependencies {
   testImplementation 'junit:junit:4.13.2'
    implementation 'com.google.guava:guava:30.1.1-jre'
}

// eclipse 프로젝트 이름을 설정하기
eclipse {
    project {
        name = "java-lang"
    }
}
  • 현업에선 보통 기존에 쓰던 플러그인 중 내가 필요한것만 가져와서 build.gradle에 넣고 사용한다.

  • $gradle eclipse 를 통해 메이븐 파일 형식을 이클립스에서 돌리는데 필요한 3가지 파일을 가져올 수 있다.
    .project
    .classpath
    .settings/

    이때, build.gradle 있는 폴더로 바꿔주고 해주는 것이 좋다.

  • 설정을 마친 후 해당 폴더를 eclipse에서 import하려면
    import -> General -> Existing Projects into Workspace -> Browse에서 C:\Users\bitcamp\git\bitcamp-Study\java-lang\app 로 경로를 설정해주면 된다.

(2) 스프링부트 프로젝트 만들기

1) 일반 애플리케이션

  • 소스파일 실행 예시

C:\Users\bitcamp\git\bitcamp-Study>Hello.js => 실행안됨

C:\Users\bitcamp\git\bitcamp-Study>node Hello.js => 실행됨
Hello, world 1
Hello, world 2
Hello, world 3

  • 자바 바이트코드 실행 예시

C:\Users\bitcamp\git\bitcamp-Study>javac Hello.java

C:\Users\bitcamp\git\bitcamp-Study>java.exe Hello
Hello, world!1
Hello, world!2

2) 스프링부트 애플리케이션

  • 스프링부트를 다룰 땐 명령창 대신 웹브라우저를 사용한다 : JVM을 직접 실행하여 바이트코드를 실행하는 대신 스프링부트가 대신 실행해준다.

  • 또한 스프링부트는 웹서버의 기능도 수행한다.

(3) 기존 자바 프로젝트를 스프링부트 프로젝트로 전환하기

1) build.gradle에 스프링부트 관련 설정을 추가한다.

  • 스프링부트 사이트(https://spring.io/)에서 https://start.spring.io/로 들어간다.
  • 설정을 아래와 같이 해준다.
    project : Gradle Project
    group : com.eomcs
    artifact : study
    add dependencies : Spring Web, Spring Boot Devtools
  • explore로 내부 구조를 확인한다.
  • 내부 구조 안에 있는 build.gradle의 값을 기존에 app폴더 안에 있는 build.gradle 파일에 덮어씌우고 아래 내용을 추가한다
 plugins {
    id 'eclipse'
}

 eclipse {
    project {
        name = "java-lang"
    }
}

2) 스프링부트 관련 파일을 추가한다.

  • src/main/resources/에
    application.properties
    static/
    templates/
    를 넣어준다.
    나중에 git push & pull을 원할하게 하기 위해 templates 폴더, static 폴더에 README.md를 추가한다.

3) 프로젝트 설정 파일을 갱신한다.

  • cmd에서 app 폴더 안에서 $gradle eclipse를 사용한다.

4) 이클립스 IDE에서 프로젝트 정보를 새로고침한다.

(4) 클래스 블록과 클래스 파일

  • 어떤 소스파일이든 컴파일 할 경우 클래스 블록 하나당 하나의 클래스 파일이 생성된다.

  • 하나의 소스파일에 클래스 블록이 3개가 있으면 컴파일 할 경우 3개의 클래스 파일이 생성된다.

(5) 클래스명과 소스파일명

  • public으로 공개된 클래스는 반드시 소스파일명과 같아야한다.

  • 소스 코드의 관리를 쉽게 하기 위해 보통 한 파일에 한 클래스를 둔다. 또한 클래스 이름과 파일명을 같게 하여 찾기 쉽게 한다.

  • 예외적으로 한 파일에 여러 클래스를 넣는 경우도 있으나 그런 경우는 거의 존재하지 않는다.

※인코딩

컴파일할 때 소스 파일의 인코딩 문자집합을 지정하지 않으면, 운영체제의 기본 문자 집합으로 저장되어 있다고 간주하고 컴파일한다.
만약 소스 파일의 인코딩 문자집합이 운영체제의 기본 문자표(character set)와 다르다면, 컴파일 오류가 발생한다.
아래와 같은 명령어를 사용하게 되면, 한글을 지원하지 않아 오류가 생긴다.

C:\Users\bitcamp\git\eomcs-java\eomcs-java-lang\app>javac -d bin/main src/main/java/com/eomcs/lang/ex01/Exam0300.java

반면, 아래와 같이 utf 8로 인코딩해주게 되면 가능하다.

C:\Users\bitcamp\git\eomcs-java\eomcs-java-lang\app>javac -encoding UTF-8 -d bin/main src/main/java/com/eomcs/lang/ex01/Exam0300.java


※메인 메소드

JVM을 통해 클래스를 실행하면, JVM은 그 클래스에서 main() 메소드를 찾아 실행한다.
그러나, main() 메소드가 없으면 아래와 같이 실행 오류가 발생한다.

C:\Users\bitcamp\git\eomcs-java\eomcs-java-lang\app>java -cp bin/main com.eomcs.lang.ex01.Exam0400
Error: Main method not found in class com.eomcs.lang.ex01.Exam0400, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application

또한 메인 메소드는 프로그램을 실행하는 시작점이라는 의미에서 "entry point" 라고도 부른다.


※JVM이 클래스를 실행하는 과정

1) 실행할 클래스 파일을 CLASSPATH에 등록된 디렉토리 경로에서 찾는다.
2) 클래스 파일이 유효한 바이트코드(bytecode) 인지 검사한다.
3) 메모리에 바이트코드를 적재(load)한다.
4) public static void main(String[] args) {} 블록을 찾는다.
5) main() 블록에 들어 있는 코드를 실행한다.

(6) 주석

1) 일반주석

  • 코드에 대한 이해를 돕기 위해 붙이는 설명이다.

  • 컴파일할 때 무시된다. 즉 .class 파일에 존재하지 않는다.

  • 한 줄 주석(end-of-line comment)

    // 줄이 끝날 때 까지 주석으로 간주한다.

  • 여러 줄 주석(traditional comment)

    /*
    주석의 끝 표시를 만날 때까지 주석으로 간주된다.
    여러 줄의 설명을 붙일 때 유용한다.
    */

2) Javadoc 주석


  • /**
    javadoc에서 HTML 문서를 만들 때 사용하는 주석이다.
    주로 API 문서를 자동 생성할 때 사용한다.
    */

  • javadoc.exe 도구를 사용하여 자바 소스 파일에서 Javadoc 주석을 추출하여 HTML 파일을 생성하려면 cmd에서 다음과 같은 명령어를 사용한다.

    $javadoc -encoding UTF-8 -charset UTF-8 -d ok -sourcepath src/main/java com.eomcs.lang.ex02

    $javadoc-encoding [소스 파일의 문자집합] -charset [생성될 HTML 파일의 문자집합] -d [생성된 파일을 놓아둘 디렉토리] -sourcepath [자바 소스 경로][자바 패키지]

3) 애노테이션(annotation)

  • 클래스, 변수(필드, 아규먼트, 로컬 변수), 메소드 선언에 붙이는 주석이다.
  • 컴파일러나 JVM에서 사용할 주석이다.
  • 컴파일 한 후에도 클래스 파일(.class)에 주석을 유지할 수 있다.
  • 클래스 파일을 메모리에 로딩할 때 주석도 함께 로딩할 수 있다.
  • 실행 중에 클래스와 함께 로딩된 주석을 추출할 수 있다.
  • '프로퍼티=값' 형태로 값을 설정한다.

ex)

public class Exam0300 {
  public static void main(String[] args) {
    System.out.println("애노테이션");
  }


  @Override
  public String toString() {
    return "Exam12";
  }
}

※@Override

수퍼 클래스에서 상속 받은 멤버를 재정의 한다는 것을 컴파일러에게 알린다.

컴파일러는 오버라이딩 규칙을 준수하는지 검사한다.

만약 오버라이딩 규칙을 따르지 않는다면 컴파일 오류를 발생시킨다.

  • 위의 코드를 실행 시, 컴파일 오류가 발생하지 않는다.

    C:\Users\bitcamp\git\eomcs-java\eomcs-java-lang\app>javac -d bin/main -encoding UTF-8 src/main/java/com/eomcs/lang/ex02/Exam0300.java

  • 만약 toString()을 toString2()로 변경 시 컴파일 오류가 발생한다.

    C:\Users\bitcamp\git\eomcs-java\eomcs-java-lang\app>javac -d bin/main -encoding UTF-8 src/main/java/com/eomcs/lang/ex02/Exam0300.java
    src\main\java\com\eomcs\lang\ex02\Exam0300.java:29: error: method does not override or implement a method from a supertype
    @Override
    ^
    1 error

  • 이 상황에서 @Override를 주석처리할 경우, 컴파일 오류가 발생하지 않는다.

    C:\Users\bitcamp\git\eomcs-java\eomcs-java-lang\app>javac -d bin/main -encoding UTF-8 src/main/java/com/eomcs/lang/ex02/Exam0300.java

(7) 리터럴(literal)

값을 표현한 것을 말한다.

ex)

package com.eomcs.study.lang.literal;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/lang/literal/exam1")
public class Exam1 {

  @GetMapping("/test1")
  public String test1() {
    return "홍길동";    
    // 문자열을 표현하는 방법
  }

  @GetMapping("/test2")
  public char test2() {
    return '홍';   
    // 문자를 표현하는 방법
  }

  @GetMapping("/test3")
  public int test3() {
    return 100;   
    // 숫자를 표현하는 방법
  }

  @GetMapping("/test4")
  public float test4() {
    return 3.14f;   
    // 부동소수점을 표현하는 방법
  }

  @GetMapping("/test5")
  public boolean test5() {
    return true;   
    // 논리값을 표현하는 방법
  }

  @GetMapping("/test6")
  public Object test6() {
    return null;
    // 주소가 지정되지 않았음을 표현하는 방법
  }

}

※ 스프링부트를 이용하여 웹브라우저에서 출력값을 보려면 http://localhost:8080/lang/literal/exam1/test1 등으로 출력이 가능하다.

(8) 정수 리터럴과 진수법

  • 그림과 같이 2진수를 짧게 표기할 때 16진수를 사용하는게 좋다.

  • 10진수의 경우 숫자를 표현할때 기본으로 많이 사용한다.

  • 16진수의 경우 문자의 코드값을 표현할때 많이 사용한다. 0x(hexadecimal)를 앞에 붙히며, 10:a 11:b 12:c 13:d 14:e 15:f로 표기한다.

  • 8진수의 경우 0을 앞에 붙혀 표기한다.

  • 2진수의 경우 0b(binary)를 앞에 붙혀 표기한다.

  • 출력 시 모두 10진수로 나온다.

ex)

package com.eomcs.study.lang.literal;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/lang/literal/exam2")
public class Exam2 {

  @GetMapping("/test1")
  public int test1() {return 100;}
  //10진수

  @GetMapping("/test2")
  public int test2() {return 0144;}
  //8진수

  @GetMapping("/test3")
  public int test3() {return 0b01100100;}
  //2진수

  @GetMapping("/test4")
  public int test4() {return 0x64;}
  //16진수
}
profile
끝없는 대양에서의 항해를 위해

0개의 댓글