프로그램(Program)이란 컴퓨터에서 실행될 때 특정 작업(specific task)을 수행하는 일련의 명령어들의 모음 또는 집합이다.
운영체제(Operating System, OS)란 시스템 하드웨어를 관리할 뿐 아니라 응용 소프트웨어를 실행하기 위하여 하드웨어 추상화 플랫폼과 공통 시스템 서비스를 제공하는 시스템 소프트웨어이다.
Binary digit의 약자로, 컴퓨터가 값을 저장하는 최소 단위이다. 1비트에는 0 또는 1만 올 수 있다.
컴퓨터 정보 처리의 최소 단위이다. 1바이트는 8비트로, 가지 값을 표현할 수 있다.
Java에서 2진수를 표현하는 법은 2의 보수법이다.
1. 2진수가 1로 시작한다면 음수이다.
2. 2의 보수법을 채택하여, 비트를 뒤집고 1을 더한다.
예시)
자바 가상 머신(JVM, Java Virtual Machine)이란 자바 바이트코드를 실행할 수 있는 주체이다.
Java에서는 Java 원시프로그램(*.java)을 컴파일하면 자바 바이트코드(*.class)로 변환된다. 자바 바이트코드는 플랫폼에 의존하는 기계어와는 다르게 독립적이라는 특징이 있다. 이 자바 바이트코드를 실행하는 것이 JVM이다.
JVM은 플랫폼에 독립적이지 않으며, 모든 JVM은 자바 가상 머신 규격에 정의된대로 자바 바이트코드를 실행한다.
Write once, Run everywhere!
프로그래밍 언어로 된 코드를 기계어로 변환해주는 작업을 말한다. Java의 경우 기계어가 아닌 바이트코드로 변환한다.
cmd 창에서 Java 원시프로그램을 컴파일하는 명령은 다음과 같다.
javac <file_name>.java # compiler
컴파일을 통해 자바 바이트코드 <file_name>.class 파일이 생성된다. 해당 파일을 cmd 창에서 실행하는 명령어는 다음과 같다.
java <file_name> # JVM
JVM, JRE, JDK
JVM
OS에 종속받지 않고 CPU가 Java를 인식 및 실행할 수 있게 하는 가상 컴퓨터이다.
JRE
Java Runtime Environment의 줄임말로, JVM + Java Class Library 등을 되어 있다. 컴파일 된 Java 프로그램을 실행하는데 필요한 패키지이다.
JDK
Java Development Kit의 줄임말로, Java를 사용하기 위해 필요한 모든 기능을 갖춘 Java용 SDK이다. JDK는 JRE에 있는 모든 것 뿐만 아니라 컴파일러(
javac)와jdb,javadoc과 같은 도구도 있다. 즉, JDK는 프로그램을 생성, 실행, 컴파일 할 수 있다.
SDK
Software Development Kit의 줄임말로 하드웨어 플랫폼, 운영체제 또는 프로그래밍 언어 제작사가 제공하는 툴이다.
main method실행 명령인 java(JVM)를 실행하였을 때 가장 먼저 호출되는 부분이다. Application에서 main() 메소드가 없다면 절대로 실행이 될 수 없다. 즉, Application을 실행하면 특정 클래스의 main()이 실행된다. 형태는 다음과 같다.
public static void main(String [] args) {}
Spring 전용의 eclipse인 STS(Sprint Tool Suite)에서 작업한다.
STS4에서 프로젝트를 만들면 기본 라이브러리인 JRE System Library와 src로 구성된다. src에서 java 프로그램을 작성한다. java에서 모든 코드는 클래스 단위이며, 클래스명과 파일명을 일치해야 한다. 새로운 클래스를 만드는 작업은 다음과 같다.

public class 내에서 main method를 호출하기 위해서는, main을 입력한 뒤 shift + spacebar를 입력하면 자동 완성된다.

"Hello SSAFY!!!" 문구를 출력하기 위해서, sysout 입력한 뒤 shift + spacebar를 입력하면 다음과 같이 자동완성 된다.
System.out.println();
실행 버튼을 누르고 Java Application을 선택하면 코드가 실행된다. 실행의 단축키는 command + F11이다.

java와 STS4 설치 가이드
본 블로그를 참고하여 설치하였다.
[macOS 맥북] JAVA 설치 및 환경변수 설정
[macOS 맥북] STS4 (Spring Tool Suite 4) 설치
// 내용 : 해당 기호가 있는 위치부터 그 줄 끝까지 주석 처리한다./* 내용 */ : 해당 범위의 내용을 주석 처리한다./** 내용 */ : Documentation API를 위한 주석 처리이다. command를 누르고 메서드의 자동완성을 볼 때 보여지는 내용이다.print : 출력을 한다. \n을 입력해야 줄바꿈이 일어난다.println : 출력을 한 뒤 줄바꿈을 한다.printf : 형식을 정하여 출력을 한다.%d : 정수(10진수)%f : 실수%c : 문자%s : 문자열System.out.print("Hello World!!!");
System.out.print("Hello World!!!\n");
System.out.println("Hello World!!!");
System.out.printf("%d\n", 10); // 10
System.out.printf("%4d\n", 10); // 4칸을 확보한 뒤 우측 정렬
System.out.printf("%-4d\n", 10); // 4칸을 확보한 뒤 좌측 정렬
System.out.printf("%04d\n", 10); // 4칸을 확보한 뒤 0으로 채워넣음
System.out.printf("%f\n", 10.12345); // 실수(소수점 6자리까지)
System.out.printf("%.2f\n", 10.12345); // 실수(소수점 2자리까지)
System.out.printf("%s\n", "싸피");
System.out.printf("%c\n", 'A');
java에서 문자 하나는 작은 따옴표('), 문자열은 큰 따옴표(")로 묶는다.
= 연산자를 통해 CPU에게 연산 작업을 의뢰클래스의 경우 PascalCase를 사용한다.
자료형 변수명;
int a;
변수명 = 저장할 값;
a = 100;
자료형 변수명 = 저장할 값;
int a = 100;
기본 자료형(Primitive Type)과 참조 자료형(Reference Type)으로 나눈다. 기본 자료형은 미리 정해진 크기의 Memory Size를 표현하며 변수 자체에 값을 저장한다.

기본 정수 자료형은
int, 기본 실수 자료형은double이다.
참조 자료형은 기본 자료형 8가지 외 모든 자료형을 말한다. Object, String, Array, Wrapper Class 등이 해당되며 기본 자료형과는 다르게 메모리 주소를 참조한다.

범위가 좁은 데이터 형에서 범위가 큰 데이터 형으로의 변환을 말한다.
byte b = 100;
int i = b;
범위가 넓은 데이터 형에서 범위가 좁은 데이터 형으로의 변환을 말한다. 형 변환을 위해서는 형 변환 연산자 (타입) 값;를 사용해야 한다.
int i = 100;
byte b = (byte) i;
++, --++i : 먼저 값을 증가시키고, 그 값을 i에 할당한다.i++ : 먼저 값을i에 할당하고, 증가시킨다.int a = 5;
System.out.println(a++); // 5
System.out.println(++a); // 7
System.out.println(--a); // 6
System.out.println(a); // 6
System.out.println(a--); // 6
System.out.println(a++); // 5
+, -+ : 숫자가 양수임을 표시한다.- : 피연산자의 부호를 반대로 변경한 결과를 반환한다.!~(type)*/%+-정수와 정수의 연산의 반환값은 정수이며, 정수와 실수의 연산은 실수이다.
int a = 10;
int b = 6;
System.out.println(a / b); // 1
System.out.println((double) a / b); // 1.6666666666666667
System.out.println(a / (double) b); // 1.6666666666666667
System.out.println((double) (a / b)); // 1.0
>, >=, <, <===, !=isinstanceof문자열에서 == 또는 !=는 참조값 또는 주소값을 비교하는 연산자이며, .equals() 또는 !.equals()는 값을 비교하는 연산자이다.
String a = "Hi";
String b = "Hi";
String c = new String("Hi");
System.out.println(a == b); // true
System.out.println(a == c); // false
System.out.println(a.equals(c)); // true
&& : 피연산자가 모두 true인 경우에만 true|| : 피연산자 중 하나라도 true인 경우에 true! : 피연산자의 결과를 반대로 바꾼다.효율적인 연산을 가능하게 해준다.
&& 연산일 경우true이고 뒤도 true라면 결과는 truefalse라면 결과는 false|| 연산일 경우true라면 결과는 truefalse이고 뒤도 false라면 결과는 false(조건문) ? (식1) : (식2)
조건문이 참일 경우 식1이 실행되고, 거짓일 경우 식2가 실행된다.

NPE
Integer number1 = null; Integer number2 = fasle ? 0 : number1;
number2에는null이 대입되지 않고,NullPointerException이 발생한다. 이는 참조 자료형(Wrapper Class)을 기본 자료형에 할당하는 언박싱 형 변환 시 NPE가 발생한다.
if 문true 또는 false 값을 산출할 수 있는 연산식 또는 boolean 타입 변수가 올 수 있다.true일 경우 문장들을 실행하고, false일 경우 실행하지 않는다.if (조건식) {
실행할 문장1;
실행할 문장2;
...
}
실행할 문장이 하나라면 중괄호는 생략 가능하다.
if-else 문true일 경우 if 블록의 문장들을 실행하고, false일 경우 else 블록의 문장들을 실행한다.if (조건식) {
실행할 문장1;
실행할 문장2;
...
} else {
실행할 문장a;
...
}
실행할 문장이 하나라면 중괄호는 생략 가능하다.
if-else if-else 문true일 경우 해당 블록의 문장들을 실행하고, false일 경우 다음 조건식으로 넘어간다.if (조건식) {
실행할 문장1;
실행할 문장2;
...
} else if (조건식) {
실행할 문장a;
...
} else {
실행할 문장A;
...
}
switch 문(수식)에 올 수 있는 것byte, short, char, int, enum, Stringbreak 문을 만날 때까지 실행한다. break 문 없이도 사용이 가능하나, 권장하지는 않는다.default는 else의 역할과 동일하다.switch (수식) {
case 값1:
실행문A;
break;
case 값2:
실행문A;
break;
default:
실행문C;
for 문초기화식은 반복문이 시작될 때 한 번만 실행된다.조건식이 false라면 반복문은 종료한다.증감식은 반복문의 반복이 끝나면 실행된다.초기화식, 증감식은 콤마(,)를 이용하여 둘 이상을 작성할 수 있다.for (;;) : 무한 루프for (초기화식; 조건식; 증감식) {
반복 수행할 문장;
}
구구단의 코드는 다음과 같다.
for (int i = 2; i < 10; i++) {
System.out.println(i + " Times");
for (int j = 1; j < 10; j++) {
System.out.printf("%d * %d = %d\n", i, j, i * j);
}
}
while 문조건식이 true일 경우에 계속해서 반복한다.조건식은 생략이 불가능하다.while (조건식) {
반복 수행할 문장;
}
do while 문반복 수행할 문장을 먼저 수행한 후, 조건식을 판단한다. 즉 최소 한 번은 수행된다.조건식이 true일 경우에 계속해서 반복한다.조건식은 생략이 불가능하다.do {
반복 수행할 문장;
} while (조건식);
break & continuebreakswitch, while, do-while, for 문의 블록에서 빠져나오기 위해서 사용한다.for (int i = 2; i < 10; i++) {
if (i > 5)
break;
System.out.println(i + " Times");
for (int j = 1; j < 10; j++) {
System.out.printf("%d * %d = %d\n", i, j, i * j);
}
}out: for (int i = 2; i < 10; i++) {
System.out.println(i + " Times");
for (int j = 1; j < 10; j++) {
if (j > 5)
break out;
System.out.printf("%d * %d = %d\n", i, j, i * j);
}
}continuefor (int i = 2; i < 10; i++) {
if (i % 2 == 1)
continue;
System.out.println(i + " Times");
for (int j = 1; j < 10; j++) {
System.out.printf("%d * %d = %d\n", i, j, i * j);
}
}out: for (int i = 2; i < 10; i++) {
System.out.println(i + " Times");
for (int j = 1; j < 10; j++) {
if (j > 5)
continue out;
System.out.printf("%d * %d = %d\n", i, j, i * j);
}
}