Java의 특징
운영체제의 독립적
객체지향 언어(Object Oriented Programming, OOP)
함수형 프로그래밍 지원
자동 메모리 관리
JVM과 JDK
Java는 컴파일러(Compiler)를 통해 기계어(Machine Language)로 변환되는 언어이다.
파일이 실행되는 과정
Source Code (.java file)
-> Compiler (javac)
-> Bytecode (.class file)
-> JVM(Java Virtual Machine) : Bytecode를 운영체제에 맞게 기계어로 변환해줌
Java 설치 관련 도구
타입의 종류
정수 타입 byte, short, int, long
long longNum = 6846611631L;
byte overflow = 127;
overflow++;
System.out.println(overflow); // -128
byte underflow = -128;
underflow--;
System.out.println(underflow); // 127
실수 타입(float, double)
float floNum = 2.7f;
double douNum1 = 2.7172714d;
double douNum2 = 2.7172714;
논리타입(boolean)
문자타입(char)
char letterBasic = 44032; // '가'의 유니코드값
System.out.println(letterBasic); // '가'가 출력
int charToInt
char nine = '9';
chatToInt = nine - '0';
System.out.println(charToInt) // 9 (유니코드상 '0'과 '9'는 9 차이남)
long longValue = 12345L;
float floatValue = longValue;
int intValue = 128;
byte byteValue = (byte)intValue;
StringBuilder sb = new StringBuilder("abc");
String com3 = sb.toString();
문자열은 참조타입이므로
문자열 리터럴로 생성을 하느냐, new 키워드로 생성을 하느냐에 따라 비교 연산자(==)의 결과는 달라질 수 있다.
문자열 생성시에서는 기본적으로 리터럴로 생성하는 것을 추천 (같은 객체를 가리키므로 그만큼 메모리를 아낄 수 있음)
String s1 = "Cat"; //
String s2 = "Cat"; // letter1과 동일한 문자열 리터럴
String s3 = new String("Cat"); // new 키워드로 String 객체를 별도로 생성
System.out.println(s1 == s2); // true
System.out.println(s1 == s3); // false
// String 객체 값을 비교할 때는 .equals 를 이용
System.out.println(s1.equals(s3)); // true
String 매서드 종류 링크 참고
String 합치는 법 (String.format)
int year = 2022;
int month = 5;
int day = 8;
// + 기호를 이용해 합침 // 더해질 떄마다, 인스턴스 생성과정이 들어가므로 메모리를 매우 많이 잡아먹음 (비추)
// 해당 작업을 많이 할 때는 StringBuilder, StringBuffer를 사용하는 것을 추천
String com1 = Integer.toString(year) + "년 " + Integer.toString(month) + "월 " + Integer.toString(day) + "일";
System.out.println(com1);
// String.format을 이용해 표현
String com2 = String.format("%d년 %d월 %d일", year, month, day);
System.out.println(com2);
// StringBuilder를 통해 합침 (여유 공간을 만들어 할당함 -> + 대신 사용하기 좋음)
StringBuilder sb = new StringBuilder();
sb.append(year).append("년 ").append(month).append("월 ").append(day).append("일");
String com3 = sb.toString();
System.out.println(com3);
StringTokenizer
StringBuilder
StringBuffer
StringBuffer str = new StringBuffer("12345");
System.out.println(str.append("678")); // 12345678 특정 문자열 추가
System.out.println(str.delete(5, 7)); // 123458 특정 부분 문자열 제서
System.out.println(str.deleteCharAt(2)); // 12458 특정 부분 문자 제거
System.out.println(str.insert(2, "3")); // 123458 특정 부분 문자 추가
System.out.println(str); // 123458
System.out.println(str.capacity()); // 21 인스턴스의 현재 버퍼 크기
변수 : 데이터의 저장 공간을 의미
변수 사용 이유
변수 선언과 할당
int letter // 변수 선언
letter = "abc" // 변수 할당
int letter = "abc" // 변수 초기화 (선언+할당)
int 10Age; // (X)
int byte; // (X)
int char; // (X)
상수 : 변하지 않는 수(고정값)
final String MY_NAME = "gwichanLee";
리터럴 : 문자가 가리키는 값 그 자체를 의미함
import java.util.Scanner;
Scanner scanner = new Scanner(System.in); // Scanner 클래스의 인스턴스를 생성
String inputValue = scanner.nextLine(); // 입력한 내용이 inputValue에 저장
System.out.println(inputValue); // 입력한 문자열이 출력
System.out.print("Hello World"); // 소괄호 안의 내용 출력, 줄바꿈X
System.out.println("Hello World"); // 소괄호 안의 내용 출력, 줄바꿈O
System.out.printf("%s %s%n", "Hello", "World"); // String.format 형식으로 출력