: 프로젝트 내의 구조화를 위한 것이다. 사실은 디렉토리임.
- 클래스 등의 구성요소의 이름이 같더라도 패키지 구조가 다르면 괜찮다.
: 프로젝트가 제 3자가 만든 프로젝트와 겹치지 않게하기 위해 보인 소유의 도메인의 역순으로 시작하는 것.
패키지는 클래스 등 구성요소 가장 상단에 "package"라는 키워드와 함께 명시한다.
- 패키지의 명명은 스네이크 케이스(Snake Case)를 이용한다.
: 첫자 소문자로 작성하고 단어간 구분만 대문자로 작성한다.
- 변수, 비정적 상수, 메서드 등의 명명에 사용한다.
- 가령 someVariable, someMethod 등.
: 첫 자 대문자로 작성하고 단어간 구분도 대문자로 작성한다.
- 클래스, 인터페이스, 열거형 등의 명명에 사용한다.
- 가령 SomeClass, SomeInterface, SomeEnum 등.
: 전체 소문자로 작성하고 단어간 구분을 언더스코어(_)로 한다.
- 패키지 명명에 사용한다.
- 가령 some_package.
: 전체 대문자로 작성하고 단어간 구분을 언더스코어(_)로 한다.
- 정적인 멤버 상수 명명에 사용한다.
- 가령 SOME_CONSTANT.
: 변수나 상수를 통하지 않고 값 그 자체를 직접 명시하는 것을 의미한다.
- 중요한 의미를 가지는 값은 리터럴이 아닌 변수나 상수를 통해 사용하는 것이 좋다.
- 원주율에 대한 리터럴 사용을 했다고 하고 리터럴하게 쓰는 것은 권장하지 않는다.
- 변수로 지정해서 사용하는 것은 괜찮지만 이렇게 사용하지 않는다.
- Java에서 pi에 대해서는 사용할 수 있게 만들어 놓은게 있다. 대부분 이것을 사용한다.
개발자가 필요해서 변수나 상수에 값을 초기화하기 위해 존재하는 리터럴은 관계없다.
전역적이지 않고 지역적이며 단발적인 값에 대한 리터럴 사용은 괜찮다
: 기본적으로 변할 수 있는 값을 변수라 한다.
: 메서드 내에 존재하는 일반 변수 혹은 매개 변수를 의미한다.
- 지역 변수는 값이 초기화되지 않을 경우 값 대입을 제외한 나머지 접근을 할 수 없다.
: 클래스 내에 존재하는 변수를 의미한다.
- 지역 변수와 달리 값을 초기화하지 않으면 기본 값으로 초기화가 이루어진다.
참조 타입 (Reference Type) : null 기초 타입 (Primitive Type) : 각 타입이 가지는 기본 값이 들어감.
: 상수의 종류는 두 가지로 나누어진다.
: 메서드 내에 존재하는 (일반)상수 혹은 매개 상수를 의미한다.
- 일반 상수의 경우 선언과 동시에 값을 초기화하지 않아도 괜찮으나 값을 초기화(혹은 대입) 한 이후로는 값을 다시 대입할 수 없다.
final double radius : 매개 상수
final double pi = 3.141592D; : 지역 상수
: 클래스 내에 존재하는 상수를 의미한다.
- 지역 상수와 달리 선언과 동시에 값을 초기화하거나 생성자(Constructor)를 통해 값을 초기화해야한다.
- 마찬가지로 값이 초기화되면 그 이후로는 값을 수정할 수 없다.
private final double pi = 3.141592D; : 멤버 상수
<final?> <타입> <변수 이름> <=초기 값?>;
<접근 제한자> <static?> <final?> <타입> <변수 이름> <=초기 값?>; ↑ 정적 여부 ↑ 상수 여부
byte : 정수를 담는다. (-128 ~ 127) short : 정수를 담는다. (-32,768 ~ 32,767) int : 정수를 담는다. (-2,147,483,648 ~ 2,147,483,647) long : 정수를 담는다. (-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807) float : 실수를 담는다. (1.4E-45 ~ 3.4E38) double : 실수를 담는다. (4.94E-324 ~ 1.79E308) boolean : 논리값을 담는다. (true/false) char : 문자를 담는다. (문자 한 개) ASCII 코드 값으로 가지게 된다. 오버플로우(Overflow) : 어떠한 타입이 가질 수 있는 최대 값을 넘어서면 최소값 부터 다시 시작 언더플로우(Underflow) : 어떠한 타입이 가질 수 있는 최소값을 음의 방향으로 넘어가면 최대값 부터 다시 시작
someNum += 1; : -2147483648 someNum -= 1; : 2147483648
- 최대값을 넘어갔음으로 최소값으로 다시 시작이 된다. 반대도 마찬가지
- 이진법으로 보았을 때 부호비트 때문에 그렇다. (1이면 양수 0이면 음수)
char someChar = 'a'; int someInt = someChar; System.out.println(someInt);
- int가 char보다 크기 때문에 이런식으로 적는게 가능하고 someInt를 출력해보면 97이 나오게 되는데 이게 아스키코드이다.
char someChar = 'a'; int someInt = someChar; someInt += 1; // 98 someChar = (char) someInt; // b System.out.println(someChar);
- someInt에 1을 더하고 char로 강제형변환하여 출력해보았더니 b가 출력이 되었다.
someInt += 2;
하게 되면 c가 찍히게 된다.
: 배열은 동일한 타입의 값을 하나의 변수에 여러개 담기 위한 것이다.
T[]
형식으로 작성하며 이 때 T는 타입이다. 가령,int[]
,String[]
등- 모든 배열은 인덱스 번호를 가지는데, 일종의 방 번호이고, 항상 0부터 시작하며 (배열의 길이 -1) 로 끝난다.
- 배열의 길이는 배열 객체가 가진 length 속성을 통해 접근할 수 있다.
int[] numbers = new int[]{}; : int 타입을 원소로 가지는 배열
int[][] numbers = new int[][]{} : int[] 타입을 원소로 가지는 배열이 된다.
: 해당하는 변수, 상수, 클래스 등에 접근할 수 있는 대상을 제한하기 위해 사용한다.
: 해당 요소에 제한 없이 접근할 수 있다.
: 같은 패키지에 있거나 상호 상속 관계에 있는 경우에만 접근할 수 있다.
: 같은 패키지에 있는 경우에만 접근할 수 있다.
- 별도로 명시하지 않으면 해당 접근 제한자다.
- 절대 default 라고 직접 쓰지 않음.
: 같은 클래스 내에 있는 경우에만 접근할 수 있다.
: 실행 단위이며 호출 대상이다.
- 클래스, 인터페이스 등이 가지고 있다.
<접근 제한자> <abstract | static | final?> <반환 타입 | void> <이름> (<매개변수, ...?>) <throws <Throwable 타입>, ...?> { <구현부?> }
public class StudyFor { public static void main(String[] args) throws Exception { // 아래의 예외를 같이 처리할 수 있도록 달아준다. try { System.out.println( divide(10, 0) );// 원칙적으로 0으로는 나눌수 없기 때문에 커스텀 예외를 만들어서 예외를 걸어주자. } catch (DivideByZeroException ex) { System.out.println("0으로 나눌 수 없음."); } } public static double divide(int a, int b) throws DivideByZeroException { // ← 이 메서드로 하여금 예외를 달아주면 된다. if(b == 0) { throw new DivideByZeroException(); // 여기에 붉은 줄이 뜨느데 위에 } return a / (double)b; } } class DivideByZeroException extends Exception { // }
: 해당 메서드의 추상적인가에 대한 여부.
- 추상적인 메서드를 추상 메서드(Abstract Method) 라고 하는 이는 정적(static) 이거나 최종적(final) 일 수 없으며 구현부를 가지지 않는다.
- 추상 메서드를 한 개 이상 가지는 클래스는 반드시 추상 클래스 (Abstract Class) 이다.
- 주로 해당 메서드의 구현부를 본 클래스를 상속 받는 자식 클래스로 하여금 직접 구현토록 하게 하기 위해 사용한다.
: 해당 메서드의 정적인가에 대한 여부
- 정적인 메서드는 본 클래스의 객체가 아닌 클래스 이름으로 접근한다. (가령, Integer.parseInt(...))
- 정적인 메서드는 추상적일 수 없고, 최종적이지 않아야 한다.
최종적이다 라는 건 : static final을 의미하며 이렇게 사용할 순 있지만 의미가 없는 코드임.
: 해당 메서드의 최종적인가에 대한 여부.
- 최종적인 메서드는 본 클래스를 상속 받는 자식 클래스가 재정의(Override) 할 수 없다.
- 최종적인 메서드는 추상적일 수 없고, 정적이지 않아야 한다.
: 해당 메서드가 반환하는 값이 없음을 의미한다.
만약 해당 메서드가 반환 타입이 있다면 모든 경우에 'return' 키워드를 이용하여 적절한 값 혹은 객체를 반환해야한다.
: 메서드 호출을 위해 필요한 변수들의 나열이다.
- 콤마(,)로 구분하여 여러개 사용 가능.
<final?> <타입> <이름>
: 메서드 호출 시 실행할 코드를 포함하고 있다.
- 추상 메서드는 구현부를 가지지 않는다.
: 메서드의 반환 타입이 있을 경우(void가 아닐 경우) 모든 경우에 대해
return
이라는 키워드를 이용하여 적절한 값을 반환해야한다.
- 단, throw 키워드를 이용해서 고의로 예외를 발생시키는 경우는 return이 없어도 됨.
- 메서드의 반환 타입이 없는 경우(void인 경우) 단순히
return
키워드만 이용하여 메서드의 실행을 그 자리에서 종료할 수 있다.
: 부모 클래스나 구현하고 있는 인터페이스의 메서드를 다시 정의하는 것.
- 재정의된 메서드는 본 객체에 대한 접근 타입을 부모 타입으로 하여도 재정의된 내용이 실행된다.
- 단, 재정의하려는 메서드가 최종적(final)일 경우 재정의할 수 없다.
- 재정의시 Override 어노테이션(Annotation, @Override)을 붙이는 것이 좋고, 안 붙여도 재정의가 안 되지는 않는다.
equals(Object o)
와hashCode( )
메서드는 Object 클래스가 가지고 있는 메서드이고, 같은 타입의 서로 다른 두 객체의 비교를 위해 재정의 한다.
: 같은 스코프(Scope) 내에서 동일한 이름을 가지는 메서드에 대해 매개 변수를 달리하여 호출자(Caller) 로 하여금 그 편의를 제공하기 위해 사용한다.
- 오버로딩된 대표적인 메서드는
System.out.println
이 있다.public static void main(String[] args) { System.out.println( isEven(5) ); System.out.println( isEven(5D) ); System.out.println( isEven(5L) ); } public static boolean isEven(int n) { return n % 2 == 0; } public static boolean isEven(double n) { return n % 2D == 0; } public static boolean isEven(long n) { return n % 2L == 0; }
: 어떠한 메서드가 스스로를 다시 호출하는 것.
- 반드시 언젠간 어떠한 조건하에 재귀가 풀려야한다. 끝내지 않으면 프로그램이 터지게 된다.
- 재귀호출은 가독성을 해칠 가능성을 가지고 있기 때문에 많이 사용하지는 않는다.
: 서로 연관있는 기능이나 값을 가지고 있는 타입(Type)이다.
<접근 제한자> <abstract | final?> <클래스 이름> <extends ...?> <implements ...?> { ... }
: 추상 클래스(Abstract Class) 를 의미하며 추상 메서드를 한개 이상 가지고 있다면 반드시 추상 클래여야한다.
- 단, 추상 메서드가 하나도 없더라도 추상 클래스 일 수는 있다.
: 최종 클래스를 의미하여 이는 해당 클래스를 더 이상 상속 받을 수 없다는 의미이다.
- 선택적으로 클래스 이름의 접두어에 Immutable 이라는 단어를 붙인다.
: 어떤 클래스를 상속 받는가에 대한 정의이다.
- 반드시 1:1관게여야 하며 생략시 Object 클래스를 상속 받는 것으로 한다. 즉, 모든 참조 타입(Reference Type)은 결론적으로 Object 타입을 상속받는다.
- 순환 상속, 다중 상속 불가.
: 어떤 인터페이스를 구현할 것인가에 대한 정의이다.
- 콤마(,)로 구분하여 여러개의 인터페이스를 구현 할 수 있다.
: 해당 클래스를 객체화하기 위해 반드시 실행해야 하는 일종의 메서드이다.
- 생성자에 대한 명시가 없을 경우 기본 생성자(Default Constructor) 가 존재하게 된다.
- 기본 생성자는 아무런 매개변수를 가지지 않고, 첫 구문으로 부모 생성자 호출(
super()
) 을 가진다.- 생성자 또한 메서드이 일종임으로 오버로딩(Overloading)이 가능하다.
- 생성자의 첫 구분은 반드시 부모 생성자 호출이거나 자기 생성자 호출(
this(...)
) 이어야만 한다.- 자식이 객체화되려면 반드시 상속 받고 있는 모든 부모 클래스가 가지는 생성자의 호출이 모두 완료되어야만 한다.
<접근 제한자> <클래스 이름> (<매개 변수,...?>) { ... }
: 클래스와 무관하게 클래스가 가지고 있는 정적인 멤버에 접근할 수 있는 생성장다.
- 명시적으로 호출할 수 있는 대상이 아님으로 메서드처럼 작성하지는 않는다. ( = 매개변수를 가지지 않는다. 재정의도 불가능하다.)
- 프로그램 실행 시 최초에 한 번만 실행되며 명시적으로 실행시킬 수 없음.
static { ... }
- 정적 생성자 예시
- 값을 집어넣어 멤버 상수 처럼 쓰는 것과 똑같으나 복잡해지거나 길어지면 정적 생성자로 뺴서 사용하는 것이 편리하다. ( 로직을 구현해서 생성자를 짜놓아야한다면 정적 생성자 사용 )
: for(i), 향상된 for, while, do-while 문은 break 키워드를 이용해서 명시적으로 반복을 중단할 수 있고, continue 키워드를 이용해서 현재 반복을 생략하고 다음 반복으로 넘어갈 수 있다.
: 인덱스를 가지는 배열이나 리스트(List)가 가지는 원소(Item)에 대해 특정 구현부를 반복하기 위해 사용한다.
- 모든 배열 및 리스트의 원소에 대한 인덱스는 0부터 시작하고,
(배열의 길이 -1)
혹은(리스트의 길이 -1)
값이 항상 마지막 인덱스 번호이다.
for (<인덱스 선언부>; <반복 조건부>; <증감부>) { <구현부> }
<반복 조건부>
가 참 일때<인덱스 선언부>
에 있는 변수에 대해<증감부>
의 로직을 실행하는 구조.
: 배열이나 컬렉션(Collection)을 대상으로 특정 구현부를 반복하기위해 사용한다.
- 일반 for(i) 문과 다른점은 인덱스 번호를 명시적으로 사용하지 않는다는 점이다. 인덱스 번호가 필요없다면 일반 for(i) 문 보다 향상된 for문을 이용하는 것이 오류 확률을 줄인다.
for ( <원소 선언부> : <배열|컬렉션> ) { <구현부> }
int[] numbers = new int[] { 1, 2, 3, 4, 5 }; for (int number : numbers) { if (number % 2 == 0) { System.out.printf("%d는 짝수다.\n", number); } else { System.out.printf("%d는 홀수다.\n", number); } }
: 특정 배열 뿐만 아니라 어떠한 조건하에 특정 구문을 (횟수와 관계없이) 반복하고자 할 때 사용한다.
while (<반복 조건>) { <구현부> }
<반복 조건>
이 참이라면<구현부>
를 실행한다.- 애초에
<반복 조건>
이 거짓이라면<구현부>
를 한번도 실행하지 않는다.int age = 0; while (age < 100) { System.out.printf("%d살입니다.\n", ++age); }
: 용도 자체는 While 문과 유사하다.
do {<구현부>} while (<반복 조건>);
<반복 조건>
이 참이라면<구현부>
를 실행한다.- While문과의 차이는
<반복 조건>
과 무관하게 최초 한 번은 무조건<구현부>
를 실행시킨다.
: 특정 조건에 따라 실행할 구현부를 분기하고자 할 때 사용한다.
if (<조건>) { <참 구현부> }
if (<조건>) { <참 구현부> } else { <거짓 구현부> }
if (<조건1>) { <참 구현부> } else if (<조건2>) { <조건 2에 대한 참 구현부> } else { <거짓 구현부> }
: 특정 대상(변수)에 대한 값으로 구현부를 분기하고자 할 때 사용한다.
switch (<대상>) { case <값1> : <값1에 대한 구현부> <break; ?> <case <값2> :...?> <default: ?> <그 외 값 처리를 위한 구현부?> }
- 특정 case에서 break 문이 없다면 그 아래에 있는 모든 case와 default가 실행된다.
: Iteration은 순서와 관계없고 순번이 없는 Collection에 대해 반복코자할 때 사용한다.
Iterator<T>
객체는 최초에 아무것도 가리키고 있지 않다.hasNext() : <boolean> 현재 가리키고 있는 것 다음 원소가 있는지의 여부를 반환한다. 만약 false가 반환되었다면 더 이상 가리킬게 없다는 의미. next() : <T> 가리키는 대상을 다음으로 넘기고 새롭게 가리키게된 객체를 반환한다.
: Java에서 발생할 수 있는 모든 오류와 예외의 부모이다.
- 부모 자식 관계임으로 이렇게 사용할 수 있는 것이다.
: Java에 존재하는 모든 오류의 부모. Throwable을 상속받는다.
- 이 때 Error는 Exception과 차이가 있는데,
try-catch
를 활용하여 예외처리를 하지 않는 것이 좋다 : 그냥 터지게 두라는 뜻.- 시스템 / 환경 자체에서 오류가 발생한걸로, '복구 불가능한' (Irrecoverable : 지금 당장 프로그램 종료 해야한다는 의미를 가진다.) 오류로 분류된다.
: 프로그램이 사용 가능한 할당된 메모리를 다 사용하였거나 더 이상 시스템에 여유 메모리가 없을 때 발생한다.
: Java에 존재하는 모든 예외는 해당 Exception 클래스를 상속 받는다.
: 어떠한 배열에 대해 배열이 가지는 인덱스 범위 밖의 값을 인덱스로 사용하면 발생한다.
- 가령 아래와 같은 상황에서 ArrayIndexOutOfBoundsException 이 발생한다.
int[] numbers = new int[] { 1, 2, 3, 4, 5 }; System.out.println( numbers[5] ); // 예외 발생 System.out.println( numbers[-1] ); // 예외 발생
: 어떠한 리스트에 대해 리스트가 가지는 인덱스 범위 밖의 값을 인덱스로 사용하면 발생한다.
- 가령 아래와 같은 상황에서 IndexOutOfBoundsException 이 발생한다.
ArrayList<Integer> numbers = new ArrayList<>(); numbers.add(1); numbers.add(2); numbers.add(3); System.out.println( numbers.get(3) );
: 변수가 가진 Stack 주소상의 값이 없는 참조 타입에 대해 그 멤버에 접근하였을 때 발생한다. 즉, 값이 null인 참조 타입의 변수의 멤버에 접근하면 발생한다.
- 가령 아래와 같은 상황에서 NullPointException 이 발생한다.
Strgin someText = null; System.out.println(someText.toUppserCase());
: 숫자에 대한 형식이 잘못되었을 때 발생한다.
- 가령, 아래와 같은 상황에서 NumberFormatException 이 발생한다.
String numberString = "Hello World!"; int numberInt = Integer.parseInt(numberString);
- 개발자는 의도적으로 예외를 발생시킬 수 있다.
throw <Throwable 객체>;
- 예제 ↓
throw new Exception("내가 고의로 던진 예외!");
: 개발자는 본인의 필요에 따라 존재하지 않는 예외를 스스로 만들 수 있다.
- 어떠한 클래스로 하여 Exception 클래스를 상속 받도록 하면 일반 예외처럼 사용할 수 있다.
- 이렇게 커스텀 예외를 만들어서 사용할 수 있다.
- 생성자가 없기 때문에 불가능하다.
- Exception이 가진 모든 생성자를 적어주면 가능해진다.
Throwable (부모) Error Exception
: 수학과 관련된 편의 기능이 포함되어 있는 클래스이다.
- java.lang 패키지 아래에 있음.
E : <double> 오일러 수(자연상수, 자연로그 밑수)이다. 약 2.718. PI : <double> 원주율이다. 약 3.141.
abs(x) : <int|long|float|double> 전달된 값 x의 절대 값을 반환한다. → absolute ceil(x) : <double> 전달된 값 x의 소수부를 올림한다. floor(x) : <double> 전달된 값 x의 소수부를 내림한다. round(x) : <int|long> 전달된 값 x의 소수부를 반올림한다. min(a, b) : <int|long|float|double> 전달된 값 a와 b중 작은 값을 반한다. max(a, b) : <int|long|float|double> 전달된 값 a와 b중 큰 값을 반한다. pow(a, b) : <double> a의 b승을 반환한다. sqrt(a) : <double> a의 제곱근을 반환한다. (Math.sqrt(25)는 5) random() : <double> 0.00000 이상 1.00000 미만의 값 중에 랜덤한 값을 반환한다.
sin(x) : <double> 사인(sin) 삼각 함수 값을 반환한다. - 전달 인자는 호도법에 의한 값이어야함. cos(x) : <double> 코사인(cos) 삼각 함수 값을 반환한다. - 전달 인자는 호도법에 의한 값이어야함. tan(x) : <double> 탄젠트(tan) 삼각 함수 값을 반환한다. - 전달 인자는 호도법에 의한 값이어야함. toDegrees(x) : <double> 호도법 → 육십분법 toRadians(x) : <double> 육십분법 → 호도법
Integer로 명시하지만 Integer / Long / Double / Float 도 동일하다.
- java.lang 패키지 아래에 있음.
- 정수(int)와 관련된 편의기능을 재공함.
- 이 자체의 객체가 정수 값이 되기도 함.
MAX_VALUE : 정수 타입(int)이 가질 수 있는 최대 값을 가지고 있다. MIN_VALUE : 정수 타입(int)이 가질 수 있는 최소 값을 가지고 있다.
- Integer 말고도 Long, Double 등도 가능하다.
parseInt(x) : <int> 전달된 문자열 x를 정수 타입으로 반환한다. - 이를 정수로 변환할 수 없다면, NumberFormatException이 발생한다. toString(x) : <String> 전달된 정수 x를 문자열로 변환하여 반환한다. valueOf(x) : <Integer> 전달된 정수 혹은 문자열인 x를 Integer 타입의 객체로 반환한다.
Integer.toString(123);
String.valueOf(123); // 이 두개는 동일하게 작동한다.
: java.lang 패키지 아래에 있음.
- 문자열과 관련된 편의 기능을 제공함
- 두 개의 문자열 비교시 동등 비교(==) 금지
✔ charAt(x) : <char> 해당 문자열이 가지는 순번(인덱스)을 기준으로, 전달 받은 정수 x번째의 문자를 반환한다. ✔ concat(x) : <String> 해당 문자열에 전달 받은 문자열 x를 이어붙여 반환한다. ✔ contains(x) : <boolean> 해당 문자열이 전달 받은 문자열 x를 포함하는지의 여부를 반환한다. indexOf(x) > -1과 같다. endsWith(x) : <boolean> 해당 문자열이 전달 받은 문자열 x로 끝나는지의 여부를 반환한다. ✔︎ equals(x) : <boolean> 해당 문자열이 전달 받은 문자열 x와 일치하는지의 여부를 반환한다. equalsIgnoreCase(x) : <boolean> 해당 문자열이 전달 받은 문자열 x와 일치하는지의 여부를 반환하는데 대/소문자를 구분하지 않는다. getBytes() : <byte[]> 해당 문자열을 바이트 배열로 반환한다. indexOf(x) : <int> 해당 문자열이 전달 받은 문자열 x를 처음으로 가지는 순번(인덱스)을 반환한다. 만약 포함하지 않는다면 -1을 반환한다. - 가령 "Hello".indexOf("l")은 2를 반환한다. lastIndexOf(x) : <int> 해당 문자열이 전달 받은 문자열 x를 마지막으로 가지는 순번(인덱스)을 반환한다. 만약 포함하지 않는다면 -1을 반환한다. - 가령 "Hello World".lastIndexOf("l")은 9를 반환한다. ✔︎ length() : <int> 해당 문자열의 길이를 반환한다. matches(x) : <boolean> 해당 문자열이 전달 받은 문자열 x에 해당하는 정규식을 만족하는가의 여부를 반환한다. ✔︎ replace(x, y) : <String> 해당 문자열에서 전달 받은 문자열 x를 찾아 문자열 y로 치환하여 반환한다. - 가령 "Hello".replace("l", "r")은 "Herro"를 반환한다. replaceAll(x, y) : <String> 해당 문자열에서 전달 받은 문자열 x에 해당하는 정규식에 해당하는 부분을 찾아 문자열 y로 치환한다. replaceFirst(x, y) : <String> 해당 문자열에서 전달 받은 문자열 x를 가장 앞에있는 한 개만 찾아 문자열 y로 치환한다. ✔︎ split(x) : <String[]> 해당 문자열에서 전달 받은 문자열 x를 기준으로 나눈 문자열 배열을 반환한다. startWith(x) : <boolean> 해당 문자열이 전달 받은 문자열 x로 시작하는지의 여부를 반환한다. ✔︎ substring(x) : <String> 해당 문자열이 가지는 순번(인덱스)를 기준으로 전달 받은 정수인 x번째 글자부터 문자열 끝까지를 반환한다. - 가령 "Hello World".substring(6)은 "World"를 반환한다. ✔︎ substring(x, y) : <String> 해당 문자열이 가지는 순번(인덱스)을 기준으로 전달 받은 정수인 x번째 글자부터 y번째 글자 앞 까지를 반환한다. (x는 포함, y는 미포함) toCharArray() : <char[]> 해당 문자열이 가지는 문자를 배열로 반환한다. ✔︎ toLowerCase() : <String> 해당 문자열이 가지는 모든 알파벳을 소문자로 치환하여 반환한다. ✔ toUpperCase() : <String> 해당 문자열이 가지는 모든 알파벳을 대문자로 치환하여 반환한다. trim() : <String> 해당 문자열의 앞/뒤에 오는 공백을 제거한다.
✔ format(x, y...) : <String> 주어진 문자열 x가 가지는 형식에 맞게 y값 들을 대입하여 문자열로 반환한다. - %c : 문자 (char, Character) - %d : 정수 (byte, short, int, long, Byte, Short, Integer, Long) - %s : 문자열 (String) - %f : 실수 (float, double, Float, Double) - %o : 8진법(Octal) - %x : 16진법(Hexadecimal) ✔ valueOf(x) : <String> 주어진 값 x(정수, 문자 등)를 문자열로 변환하여 반환한다.