운영체제에 독립적 : JRE(Java Runtime Enviroment : JVM(자바 가상머신) + 표준 라이브러리)가 설치되어 있는 모든 운영체제에서 실행이 가능하도록 만들었다.
객체 지향 언어(Ojbect Oriented Programming, OOP) : 여러 부품(객체)들을 만들고 조립하여 하나의 프로그램을 실행하는 개념. 유지보수가 쉽고 확장성이 높다.
함수형 프로그래밍 지원 : 자바 8버전부터 함수형 프로그래밍을 지원하는 문법인 람다식과 스트림이 추가되었다. 이를 사용하면 컬렉션의 요소를 필터링, 매핑, 집계 처리하기 위워지고 코드가 간결해진다.
자동 메모리 관리(Garbage Collection) : 자바는 Garbagea Collectier를 실행시켜 자동으로 사용하지 않는 메모리를 수거한다.
자바는 컴파일러(Compiler)를 통해 기계어로 변환되는 언어이다. 자바 언어를 JVM이 이해할 수 있는 바이트 코드로 변환하는 것을 의미한다.
JVM(Java Virtual Machine) : 자바 프로그램을 실행시키는 도구이다. 자바가 운영체제에 독립적인 것은 JVM이 있기 때문에 가능하다. 자바 코드로 작성한 프로그램을 해석해 실행하는 별도의 프로그램이다. 즉, 프로그램을 실행하는 프로그램이다.
JVM의 경우 JDK나 JRE를 설치하면 자동으로 설치된다.
JDK(Java Development Kit)
메서드 정의
public static void main(String[] args){
}
Main method : 프로그램이 실행될 때 가장 먼서 실행되는 진입점 함수라고 부른다.
의사 코드 슈도코드(Pseudo Code) : 프로그래밍 언어로 작성하기 전에, 무엇을 어떤 과정을 통해 만들지 사람의 언어로 먼저 작성하는 것이다.
나중에 대형 프로젝트를 위해서 소규모 프로젝트로 미리 연습해두기. 코드 짤때 오류를 줄이고 방향성을 알게 해준다.
class Example {
public static void main(String[] args) {
int num; // 변수 선언
num = 1; // 값 할당
}
}
타입이란? : 타입은 어떤 값의 유형 및 종류를 의미하며, 타입에 따라 값이 차지하는 메모리 공간의 크기와, 값이 저장되는 방식이 결정된다.
기본 타입과 참조 타입
리터럴(Literal)이란? : 프로그래밍에서 리터럴이란 문자가 가르키는 값 그자체를 뜻한다.
class Example {
public static void main(String[] args) {
int num; // 변수 선언
num = 1; // 값 할당 , 1이 리터럴이다.
}
}```
// 각 데이터 타입의 표현 범위에 맞는 값을 할당하고 있다.
byte byteNum = 123;
short shortNum = 12345;
int intNum = 123456789;
long longNum = 12345678910L;
// 각 데이터 타입의 표현 범위에 벗어난 값을 할당하고 있어 에러가 발생한다.
byte byteNum = 130;
short shortNum = 123456;
int intNum = 12345678910;
// 숫자가 길면 언더바로 구분할 수 있다.
int intNum = 12_345_678_910;
long longNum = 12_345_678_910L;```
String 타입의 변수는 String 변수명; 으로 선언할 수 있다.
선언한 변수에 문자열을 할당하는 두 가지 방법
실제 문자열의 내용을 값으로 가지고 있는 것이 아니라, 문자열이 존재하는 메모리 공간 상의 주소값을 지정하고 있다.
동일한 문자열 리터럴을 두 변수에 할당하는 경우, 두 변수는 같은 문자열의 참조값을 공유한다.
ex).
String name1 = "kim Coding";
String name2 = "kim Coding";
ex).
String name3 = new String("Kim Coding");
String name4 = new String("Kim Coding");
charAt() 메서드 : 해당 문자열의 특정 인덱스에 해당하는 문자를 반환한다.
compareTo() 메서드 : 해당 문자열을 인수로 전달된 문자열과 사전 편찬 순으로 비교한다. 대소문자를 구분하여 비교한다. 만약 두 문자열이 같다면 0을 반환하며, 해당 문자열이 인수로 전달된 문자열보다 작으면 음수를 크면 양수를 반환한다. 만약 문자열을 비교할 때 대소문자를 구분하지 않기를 원한다면, compareToIngnoreCase() 메소드를 사용하면 된다.
concat() 메서드 : 해당 문자열의 뒤에 인수로 전달된 문자열으 추가한 새로운 문자열을 반환한다. (두 문자열을 연결한다.)
indexOf() 메서드 : 해당 문자열에서 특정 문자나 문자열이 처음으로 등장하는 위치의 인덱스를 반환한다.
trim() 메서드 : 해당 문자열의 맨 앞과 맨 뒤에 포함된 모든 공백 문자를 제거한다.
toLowerCase()와 toUpperCase() 메서드 : 모든 문자를 소문자 그리고 대문자로 변환시켜 줍니다.
https://www.javatpoint.com/understanding-toString()-method 자바 문자열 조작 메서드를 설명하고 있는 레퍼런스
StringTokenizer 이란? : 문자열을 우리가 지정한 구분자로 문자열을 쪼개주는 클래스이다. 그렇게 쪼개어진 문자열을 토큰(Token)이라고 부른다. 사용하기 위해서는 java.util.StringTokenizer를 import해야한다.
int countToken() : 남아있는 token의 개수를 반환한다. 전체 token의 개수가 아닌 현재 남아있는 token 개수이다.
boolean hasMoreElements(), boolean hasMoreTokens() : 현재 위치 뒤에 있는 문자열에서 하나 이상의 토큰을 사용할 수 있는 경우 true를 반환하고 그렇지 않으면 false를 반환한다.
Object nextElement(), String nextToken() : 다음의 토큰을 반환한다. 두 메서드는 같은 객체를 반환하지만, nextElements는 Object를 nextToken은 String을 반환한다.
StringTokenizer tokenizer = new SringTokenizer(str, "구분자 종류"); 구분자 종류를 여러개 선택 가능하고 추가한 구분자대로 문자열을 쪼개준다.
public class Main {
public static void main(String[] args) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("문자열 ").append("연결");
String str = stringBuilder.toString();
System.out.println(stringBuilder);
System.out.println(str);
}
}
StringBuffer str = new StringBuffer("Java");StringBuffer str02 = new StringBuffer("Java");StringBuffer str = new StringBuffer("Java Oracle");
System.out.println("문자열 : " + str);
System.out.println(str.delete(4, 8));
System.out.println(str.deleteCharAt(1));
System.out.println("deleteCharAt() 메소드 호출 후 문자열 : " + str);
StringBuffer str = new StringBuffer("Java Programming!!");
System.out.println("문자열 : " + str);
System.out.println(str.insert(4, "Script"));
System.out.println("insert() 메서드 호출 후 문자열 : " + str);

int num1 = 1;
int prefix = ++num1; // num 의 값이 1만큼 증가된다음 결과값이 prefix에 할당된다.
int num2 = 1;
int postfix = num2++; // postfix에 num2 값이 먼저 할당되고 num2의 값이 1 증가한다.
if) num1 ~ 5의 값들이 10일 경우
num1 += 3; // num1 -> 13
num2 -= 3; // num2 -> 7
num3 *= 3; // num3 -> 30
num4 /= 3; // num4 -> 3
num5 %= 3; // num5 -> 1
5 > 3 true
5 <= 5 true
3 > 2 true
2 >= 3 false
5 == 3 false
5 == 5 true
3 != 2 true
3 != 3 false
x y x && y x || y
false false false false
false true false true
true false false true
true true true true 우선순위 연산자 내용
1 (),[] 괄호 / 대괄호
2 !, ~, ++, -- 부정/ 증감 연산자
3 *, /, % 곱셈 / 나눗셈 연산자
4 <, <=, >, >= 대소 비교 연산자
5 && AND 연산자
6 || OR 연산자
7 ? : 조건 연산자
8 =, +=, -=, /=, %= 대입/할당 연산자```ex. ( 조건식 && 조건식 ) ? A : B
앞에 ()안이 true이면 A를 출력하고 false이면 B를 출력한다.
public static void main(String[] args) {
String str1 = String.format("%d", 101); // Integer value
String str2 = String.format("%s", "Amar Singh"); // String value
String str3 = String.format("%f", 101.00); // Float value
String str4 = String.format("%x", 101); // Hexadecimal value
String str5 = String.format("%c", 'c'); // Char value
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
System.out.println(str4);
System.out.println(str5);
}
Result
101
Amar Singh
101.000000
65
c
import java.util.Scanner; // Scanner 클래스를 가져옵니다.
Scanner scanner = new Scanner(System.in); // Scanner 클래스의 인스턴스를 생성합니다.
String inputValue = scanner.nextLine(); // 입력한 내용이 inputValue에 저장됩니다.
System.out.println(inputValue); // 입력한 문자열이 출력됩니다.```
참고로, scanner에는 문자열을 입력받는 nextLine()뿐만 아니라, 정수형을 입력받을 수 있는 nextInt(), 실수형을 입력받을 수 있는 nextFloat()등의 메서드들도 존재한다.