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 로 경로를 설정해주면 된다.
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을 직접 실행하여 바이트코드를 실행하는 대신 스프링부트가 대신 실행해준다.
또한 스프링부트는 웹서버의 기능도 수행한다.
1) build.gradle에 스프링부트 관련 설정을 추가한다.
plugins {
id 'eclipse'
}
eclipse {
project {
name = "java-lang"
}
}
2) 스프링부트 관련 파일을 추가한다.
3) 프로젝트 설정 파일을 갱신한다.
4) 이클립스 IDE에서 프로젝트 정보를 새로고침한다.
어떤 소스파일이든 컴파일 할 경우 클래스 블록 하나당 하나의 클래스 파일이 생성된다.
하나의 소스파일에 클래스 블록이 3개가 있으면 컴파일 할 경우 3개의 클래스 파일이 생성된다.
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" 라고도 부른다.
1) 실행할 클래스 파일을 CLASSPATH에 등록된 디렉토리 경로에서 찾는다.
2) 클래스 파일이 유효한 바이트코드(bytecode) 인지 검사한다.
3) 메모리에 바이트코드를 적재(load)한다.
4) public static void main(String[] args) {} 블록을 찾는다.
5) main() 블록에 들어 있는 코드를 실행한다.
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)
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
값을 표현한 것을 말한다.
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 등으로 출력이 가능하다.
그림과 같이 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진수
}