javac Helloworld.java
java Helloworld
소스코드 파일을 실행가능한 소프트웨어 산출물로 만드는 일련의 과정이며 컴파일은 빌드의 부분 집합이다.
- gradle init
- select type of project → (2) application
- select implementation language → (3) Java
- multiple subprojects? → (1) only one application project
- select build script DSL
- build script: 빌드를 어떻게 할 것인가?
- 즉, 어떠한 script 언어를 사용할 것인지에 대한 질문
- Groovy 선택
- select test framework
- JUnit Jupiter == JUnit 5
- JUnit 5 사용
- Project name 설정
- Source package 설정
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
├── main
│ ├── java
│ │ └── temp
│ │ └── App.java
│ └── resources
└── test
├── java
│ └── temp
│ └── AppTest.java
└── resources
build, run → gradle 명령 단위들(task)
build.gradle에 명시 되어 있다.
// build.gradle
tasks.named('test') {
useJUnitPlatform()
}
// gradle test → useJUnitPlatform() 실행
build.gradle의 plugins에 java 프로그램을 빌드하고 실행할 수 있는 모든 테스크들이 존재한다.
명령어 | 설명 |
---|---|
Option+Enter | 빠른 수정 |
Command + 1 | 폴더창으로 커서 이동 |
Command + N | 새파일 생성 |
Shift + Shift | 파일 이름 검색 |
Option+Up/Down | 단계별 블럭 지정 |
Command+/ | 주석 토글 |
Command+Option+L | 코드 리포맷팅 |
Ctrl+T | 리팩토링 메뉴 |
Shift+Command+A | 명령어 검색 |
call by value
int a = 100
call by reference
Integer b = 100
String a = "";
// String이 10개가 생성된다. 새로운 String이 생성된다.
for(int i = 0; i < 10; i++) {
a += i;
// "", "0", "01", "012", ..., "0123456789" → 10개
}
StringBuffer와 StringBuilder는 가변성을 갖는다라는 공통점있다. 차이점은 StringBuffer의 경우 동기화 키워드를 지원하여 멀티쓰레드 환경에서 안전하다라는 점과 StringBuilder의 경우 동기화를 지원하지 않아 멀티쓰레드 환경에서 안전하지 않고 단일쓰레드에서 StringBuffer 보다 뛰어나다는 차이점이 있다.
toString()
equals()
hashCode()
기본 동작: 인스턴스가 저장된 가상머신의 주소를 10진수로 반환
오버라이딩을 통해 두 개의 서로 다른 메모리에 위치한 객체가 동일성을 갖도록 한다
equals() & hashCode()
equals()와 hashCode()를 함께 재정의 해야한다고 한다. Collection(HashSet, HashMap, HashTable)의 경우 hash 값을 사용하기에 equals()만 재정의한 경우 코드가 예상과 다르게 작동할 수 있다고 한다.
// equals()만 재정의
Set<Car> cars = new HashSet<>();
cars.add(new Car("foo"));
cars.add(new Car("foo"));
System.out.println(cars.size()); // 2
// equals() & hashCode() 재정의
Set<Car> cars = new HashSet<>();
cars.add(new Car("foo"));
cars.add(new Car("foo"));
System.out.println(cars.size()); // 1
빌드결과. 바이너리. 제너레이트 가능한 파일들. 로컬설정. 키/보안관련 파일들
http://gitignore.io/
자신이 사용하는 환경에 따라 .gitignore를 자동으로 생성할 수 있다.
.gitignore & gradle
gradle-wrapper.jar 또는 grande-wrapper.properties오 같이 gradle wrapper 관련 파일들을 .gitignore에 포함해야하나?
개인이 편한데로 할 것 (토론이 많이 일어나는 주제..)