https://velog.io/@hsw08/빌드툴-Ant-Maven-Gradle
라이브러리 의존성 관리 및 버전 관리 등을 위해 대규모 프로젝트에서는 수동으로 하기보다는 빌드툴(Maven, Gradle)을 사용한다. 특히, Gradle은 점진적 빌드, 빌드 캐시, 데몬 프로젝트의 방식으로 속도를 개선했다.
빌드 과정
: 전처리(preprocessing) -> 컴파일(compilation) -> 어셈블(assemble) -> 링킹(linking)
compile | interpreted | hybrid | |
---|---|---|---|
장점 | - 한번 빌드가 완료된 실행 파일은 실행 속도가 빠르다 - 매번 번역할 필요x, 실행 파일만 실행하므로 전체적인 시간면에서 효율적 | - 컴파일 과정이 없고 바로 실행해서 디버깅(개발속도)에 유리 - OS(플랫폼)에 독립적 : 플랫폼에 지원하는 인터프리터만 있다면 실행 가능 | - 플랫폼에 독립적, 기존 인터프리터 언어보다 속도가 빠름 |
단점 | - 프로그램 수정시 빌드과정 전체를 처음부터 다시 실행 (대규모 프로그램에서는 생산성이 떨어짐) - 플랫폼(OS)에 매우 의존적 | - 빌드 되어있는 컴파일 언어로 된 프로그램보다 느림 - 보안에 좋지 않음 : 코드를 열면 다 보임 | - 컴파일 언어처럼 하드웨어를 직접 제어하는 작업은 불가능 |
https://st-lab.tistory.com/176
Mac 기준이며 개인적으로 잘 사용하지 않거나 몰랐던 것 위주로 정리했다
: 변경 불가능(immutable)한 클래스
문자열 저장 : char[] value
-> 한번 생성된 String 인스턴스가 갖고 있는 문자열은 읽어 올 수만 있고, 변경할 수는 없다.
'+' 연산자로 문자열을 결합하는 경우
: 인스턴스 내의 문자열이 바뀌는 것이 아니라 새로운 문자열이 담긴 String 인스턴스가 생성되는 것
-> 문자열 다루는 작업이 필요한 경우 StringBuffer 클래스(문자열 변경 가능) 사용
컴파일시에 클래스 파일에 저장됨(String 인스턴스)
String s1 = "Hello World";
String s2 = "Hello World";
System.out.println(a==b);
// reference가 같은지 비교 -> true