Java - 정리

김지원·2022년 8월 8일
0

JAVA 총 정리

목록 보기
10/11

패키지

1. 패키지(Package)

: 프로젝트 내의 구조화를 위한 것이다. 사실은 디렉토리임.

  • 클래스 등의 구성요소의 이름이 같더라도 패키지 구조가 다르면 괜찮다.

2. 베이스 페키지(Base-package)

: 프로젝트가 제 3자가 만든 프로젝트와 겹치지 않게하기 위해 보인 소유의 도메인의 역순으로 시작하는 것.

3. 페키지 명시

패키지는 클래스 등 구성요소 가장 상단에 "package"라는 키워드와 함께 명시한다.

4. 패키지 명명

  1. 패키지의 명명은 스네이크 케이스(Snake Case)를 이용한다.

명명법

1. 카멜 케이스(Camel Case)

: 첫자 소문자로 작성하고 단어간 구분만 대문자로 작성한다.

  • 변수, 비정적 상수, 메서드 등의 명명에 사용한다.
  • 가령 someVariable, someMethod 등.

2. 파스칼 케이스(Pascal Case)

: 첫 자 대문자로 작성하고 단어간 구분도 대문자로 작성한다.

  • 클래스, 인터페이스, 열거형 등의 명명에 사용한다.
  • 가령 SomeClass, SomeInterface, SomeEnum 등.

3. 스네이크 케이스(Snake Case)

: 전체 소문자로 작성하고 단어간 구분을 언더스코어(_)로 한다.

  • 패키지 명명에 사용한다.
  • 가령 some_package.

4. 어퍼 스네이크 케이스(Upper Snake Case)

: 전체 대문자로 작성하고 단어간 구분을 언더스코어(_)로 한다.

  • 정적인 멤버 상수 명명에 사용한다.
  • 가령 SOME_CONSTANT.

리터럴

1. 리티럴(Literal)

: 변수나 상수를 통하지 않고 값 그 자체를 직접 명시하는 것을 의미한다.

  • 중요한 의미를 가지는 값은 리터럴이 아닌 변수나 상수를 통해 사용하는 것이 좋다.

  • 원주율에 대한 리터럴 사용을 했다고 하고 리터럴하게 쓰는 것은 권장하지 않는다.
  • 변수로 지정해서 사용하는 것은 괜찮지만 이렇게 사용하지 않는다.
  • Java에서 pi에 대해서는 사용할 수 있게 만들어 놓은게 있다. 대부분 이것을 사용한다.

2.

개발자가 필요해서 변수나 상수에 값을 초기화하기 위해 존재하는 리터럴은 관계없다.

3.

전역적이지 않고 지역적이며 단발적인 값에 대한 리터럴 사용은 괜찮다


변수와 상수

1. 변수(Variable)

: 기본적으로 변할 수 있는 값을 변수라 한다.

1-1. 지역 변수(Local Variable)

: 메서드 내에 존재하는 일반 변수 혹은 매개 변수를 의미한다.

  • 지역 변수는 값이 초기화되지 않을 경우 값 대입을 제외한 나머지 접근을 할 수 없다.

1-2. 멤버 변수(Member Variable)

: 클래스 내에 존재하는 변수를 의미한다.

  • 지역 변수와 달리 값을 초기화하지 않으면 기본 값으로 초기화가 이루어진다.
참조 타입 (Reference Type) : null
기초 타입 (Primitive Type) : 각 타입이 가지는 기본 값이 들어감.

2. 상수(Constant)

: 상수의 종류는 두 가지로 나누어진다.

2-1. 지역상수(Local Constant)

: 메서드 내에 존재하는 (일반)상수 혹은 매개 상수를 의미한다.

  • 일반 상수의 경우 선언과 동시에 값을 초기화하지 않아도 괜찮으나 값을 초기화(혹은 대입) 한 이후로는 값을 다시 대입할 수 없다.
final double radius : 매개 상수 
final double pi = 3.141592D; : 지역 상수

2-2. 멤버 상수(Member Constant)

: 클래스 내에 존재하는 상수를 의미한다.

  • 지역 상수와 달리 선언과 동시에 값을 초기화하거나 생성자(Constructor)를 통해 값을 초기화해야한다.
  • 마찬가지로 값이 초기화되면 그 이후로는 값을 수정할 수 없다.
private final double pi = 3.141592D; : 멤버 상수

3. 선언(Declaration)

3-1. 지역 변수(상수)

<final?> <타입> <변수 이름> <=초기 값?>;

3-2. 멤버 변수(상수)

<접근 제한자> <static?> <final?> <타입> <변수 이름> <=초기 값?>;
		   ↑ 정적 여부  ↑ 상수 여부

4. 기초 타입(Primitive Type)

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이면 음수)

ASCII 코드

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가 찍히게 된다.

5. 배열

: 배열은 동일한 타입의 값을 하나의 변수에 여러개 담기 위한 것이다.

  • T[] 형식으로 작성하며 이 때 T는 타입이다. 가령, int[], String[]
  • 모든 배열은 인덱스 번호를 가지는데, 일종의 방 번호이고, 항상 0부터 시작하며 (배열의 길이 -1) 로 끝난다.
  • 배열의 길이는 배열 객체가 가진 length 속성을 통해 접근할 수 있다.
int[] numbers = new int[]{}; : int 타입을 원소로 가지는 배열
int[][] numbers = new int[][]{} : int[] 타입을 원소로 가지는 배열이 된다. 

접근 제한자(Access Modifier)

1. 접근 제한자(Access Modifier)

: 해당하는 변수, 상수, 클래스 등에 접근할 수 있는 대상을 제한하기 위해 사용한다.

2. public

: 해당 요소에 제한 없이 접근할 수 있다.

3. protected

: 같은 패키지에 있거나 상호 상속 관계에 있는 경우에만 접근할 수 있다.

4. default

: 같은 패키지에 있는 경우에만 접근할 수 있다.

  • 별도로 명시하지 않으면 해당 접근 제한자다.
  • 절대 default 라고 직접 쓰지 않음.

5. private

: 같은 클래스 내에 있는 경우에만 접근할 수 있다.


메서드(Method)

1. 메서드(Method)

: 실행 단위이며 호출 대상이다.

  • 클래스, 인터페이스 등이 가지고 있다.

2. 구조

<접근 제한자> <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

: 해당 메서드의 추상적인가에 대한 여부.

  • 추상적인 메서드를 추상 메서드(Abstract Method) 라고 하는 이는 정적(static) 이거나 최종적(final) 일 수 없으며 구현부를 가지지 않는다.
  • 추상 메서드를 한 개 이상 가지는 클래스는 반드시 추상 클래스 (Abstract Class) 이다.
  • 주로 해당 메서드의 구현부를 본 클래스를 상속 받는 자식 클래스로 하여금 직접 구현토록 하게 하기 위해 사용한다.

static

: 해당 메서드의 정적인가에 대한 여부

  • 정적인 메서드는 본 클래스의 객체가 아닌 클래스 이름으로 접근한다. (가령, Integer.parseInt(...))
  • 정적인 메서드는 추상적일 수 없고, 최종적이지 않아야 한다.
최종적이다 라는 건 : static final을 의미하며 이렇게 사용할 순 있지만 의미가 없는 코드임.

final

: 해당 메서드의 최종적인가에 대한 여부.

  • 최종적인 메서드는 본 클래스를 상속 받는 자식 클래스가 재정의(Override) 할 수 없다.
  • 최종적인 메서드는 추상적일 수 없고, 정적이지 않아야 한다.

void

: 해당 메서드가 반환하는 값이 없음을 의미한다.

*

만약 해당 메서드가 반환 타입이 있다면 모든 경우에 'return' 키워드를 이용하여 적절한 값 혹은 객체를 반환해야한다.

매개변수(Parameter)

: 메서드 호출을 위해 필요한 변수들의 나열이다.

  • 콤마(,)로 구분하여 여러개 사용 가능.

매개변수의 구조

<final?> <타입> <이름>

구현부(Body)

: 메서드 호출 시 실행할 코드를 포함하고 있다.

  • 추상 메서드는 구현부를 가지지 않는다.

3. 반환

: 메서드의 반환 타입이 있을 경우(void가 아닐 경우) 모든 경우에 대해 return 이라는 키워드를 이용하여 적절한 값을 반환해야한다.

  • 단, throw 키워드를 이용해서 고의로 예외를 발생시키는 경우는 return이 없어도 됨.
  • 메서드의 반환 타입이 없는 경우(void인 경우) 단순히 return 키워드만 이용하여 메서드의 실행을 그 자리에서 종료할 수 있다.

4. 재정의, 오버라이딩(Override)

: 부모 클래스나 구현하고 있는 인터페이스의 메서드를 다시 정의하는 것.

  • 재정의된 메서드는 본 객체에 대한 접근 타입을 부모 타입으로 하여도 재정의된 내용이 실행된다.
  • 단, 재정의하려는 메서드가 최종적(final)일 경우 재정의할 수 없다.
  • 재정의시 Override 어노테이션(Annotation, @Override)을 붙이는 것이 좋고, 안 붙여도 재정의가 안 되지는 않는다.
  • equals(Object o)hashCode( ) 메서드는 Object 클래스가 가지고 있는 메서드이고, 같은 타입의 서로 다른 두 객체의 비교를 위해 재정의 한다.

5. 오버로딩(Overload, Overloading)

: 같은 스코프(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;
 }

6. 재귀호출(Recursive Call)

: 어떠한 메서드가 스스로를 다시 호출하는 것.

  • 반드시 언젠간 어떠한 조건하에 재귀가 풀려야한다. 끝내지 않으면 프로그램이 터지게 된다.
  • 재귀호출은 가독성을 해칠 가능성을 가지고 있기 때문에 많이 사용하지는 않는다.

콜라츠 추측 - 재귀 풀이


클래스(Class)

1. 클래스(Class)

: 서로 연관있는 기능이나 값을 가지고 있는 타입(Type)이다.

2. 구조

<접근 제한자> <abstract | final?> <클래스 이름> <extends ...?> <implements ...?> { ... }

3. abstract

: 추상 클래스(Abstract Class) 를 의미하며 추상 메서드를 한개 이상 가지고 있다면 반드시 추상 클래여야한다.

  • 단, 추상 메서드가 하나도 없더라도 추상 클래스 일 수는 있다.

4. final

: 최종 클래스를 의미하여 이는 해당 클래스를 더 이상 상속 받을 수 없다는 의미이다.

  • 선택적으로 클래스 이름의 접두어에 Immutable 이라는 단어를 붙인다.

5. extends

: 어떤 클래스를 상속 받는가에 대한 정의이다.

  • 반드시 1:1관게여야 하며 생략시 Object 클래스를 상속 받는 것으로 한다. 즉, 모든 참조 타입(Reference Type)은 결론적으로 Object 타입을 상속받는다.
  • 순환 상속, 다중 상속 불가.

6. implements

: 어떤 인터페이스를 구현할 것인가에 대한 정의이다.

  • 콤마(,)로 구분하여 여러개의 인터페이스를 구현 할 수 있다.

7. 생성자(Constructor)

: 해당 클래스를 객체화하기 위해 반드시 실행해야 하는 일종의 메서드이다.

  • 생성자에 대한 명시가 없을 경우 기본 생성자(Default Constructor) 가 존재하게 된다.
  • 기본 생성자는 아무런 매개변수를 가지지 않고, 첫 구문으로 부모 생성자 호출( super() ) 을 가진다.
  • 생성자 또한 메서드이 일종임으로 오버로딩(Overloading)이 가능하다.
  • 생성자의 첫 구분은 반드시 부모 생성자 호출이거나 자기 생성자 호출( this(...) ) 이어야만 한다.
  • 자식이 객체화되려면 반드시 상속 받고 있는 모든 부모 클래스가 가지는 생성자의 호출이 모두 완료되어야만 한다.

생성자 형식

<접근 제한자> <클래스 이름> (<매개 변수,...?>) { ... }

8. 정적 생성자(Static Constructor)

: 클래스와 무관하게 클래스가 가지고 있는 정적인 멤버에 접근할 수 있는 생성장다.

  • 명시적으로 호출할 수 있는 대상이 아님으로 메서드처럼 작성하지는 않는다. ( = 매개변수를 가지지 않는다. 재정의도 불가능하다.)
  • 프로그램 실행 시 최초에 한 번만 실행되며 명시적으로 실행시킬 수 없음.

정적 생성자(Static Constructor) 형식

static { ... }

  • 정적 생성자 예시
  • 값을 집어넣어 멤버 상수 처럼 쓰는 것과 똑같으나 복잡해지거나 길어지면 정적 생성자로 뺴서 사용하는 것이 편리하다. ( 로직을 구현해서 생성자를 짜놓아야한다면 정적 생성자 사용 )

문법

: for(i), 향상된 for, while, do-while 문은 break 키워드를 이용해서 명시적으로 반복을 중단할 수 있고, continue 키워드를 이용해서 현재 반복을 생략하고 다음 반복으로 넘어갈 수 있다.

1. for(i) 반복문

: 인덱스를 가지는 배열이나 리스트(List)가 가지는 원소(Item)에 대해 특정 구현부를 반복하기 위해 사용한다.

  • 모든 배열 및 리스트의 원소에 대한 인덱스는 0부터 시작하고, (배열의 길이 -1) 혹은 (리스트의 길이 -1) 값이 항상 마지막 인덱스 번호이다.

1-1 for(i) 반복문 구조

for (<인덱스 선언부>; <반복 조건부>; <증감부>) { <구현부> }
  • <반복 조건부> 가 참 일때 <인덱스 선언부> 에 있는 변수에 대해 <증감부> 의 로직을 실행하는 구조.

2. 향상된 for 문 (Enhanced for)

: 배열이나 컬렉션(Collection)을 대상으로 특정 구현부를 반복하기위해 사용한다.

  • 일반 for(i) 문과 다른점은 인덱스 번호를 명시적으로 사용하지 않는다는 점이다. 인덱스 번호가 필요없다면 일반 for(i) 문 보다 향상된 for문을 이용하는 것이 오류 확률을 줄인다.

2-1. 향상된 for 문 (Enhanced 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);
     }
}

3. while 문

: 특정 배열 뿐만 아니라 어떠한 조건하에 특정 구문을 (횟수와 관계없이) 반복하고자 할 때 사용한다.

3-1. while 문 구조

while (<반복 조건>) { <구현부> }
  • <반복 조건> 이 참이라면 <구현부> 를 실행한다.
  • 애초에 <반복 조건> 이 거짓이라면 <구현부> 를 한번도 실행하지 않는다.
int age = 0;
while (age < 100) {
	System.out.printf("%d살입니다.\n", ++age);
}

4. Do-While 문

: 용도 자체는 While 문과 유사하다.

4-1. Do-While 문 구조

do {<구현부>} while (<반복 조건>);
  • <반복 조건> 이 참이라면 <구현부> 를 실행한다.
  • While문과의 차이는 <반복 조건> 과 무관하게 최초 한 번은 무조건 <구현부> 를 실행시킨다.

5. If 문

: 특정 조건에 따라 실행할 구현부를 분기하고자 할 때 사용한다.

5-1. If 문 구조

if (<조건>) {
     < 구현부>
}
if (<조건>) {
     < 구현부>
} else {
     <거짓 구현부>
}
if (<조건1>) {
	< 구현부>
} else if (<조건2>) {
	<조건 2에 대한  구현부>
} else {
	<거짓 구현부>
}

6. Switch 문

: 특정 대상(변수)에 대한 값으로 구현부를 분기하고자 할 때 사용한다.

6-1. Switch 문 구조

switch (<대상>) {
	case <값1> : 
    	<값1에 대한 구현부>
        <break; ?>
    <case <값2> :...?>
    <default: ?>
    	<   처리를 위한 구현부?>
}
  • 특정 case에서 break 문이 없다면 그 아래에 있는 모든 case와 default가 실행된다.

7. Iteration 반복

: Iteration은 순서와 관계없고 순번이 없는 Collection에 대해 반복코자할 때 사용한다.

  • Iterator<T> 객체는 최초에 아무것도 가리키고 있지 않다.
hasNext() : <boolean> 현재 가리키고 있는 것 다음 원소가 있는지의 여부를 반환한다. 만약 false가 반환되었다면 더 이상 가리킬게 없다는 의미.
next()    : <T> 가리키는 대상을 다음으로 넘기고 새롭게 가리키게된 객체를 반환한다.

예외

Throwable

: Java에서 발생할 수 있는 모든 오류와 예외의 부모이다.

  • 부모 자식 관계임으로 이렇게 사용할 수 있는 것이다.

Error

: Java에 존재하는 모든 오류의 부모. Throwable을 상속받는다.

  • 이 때 Error는 Exception과 차이가 있는데, try-catch를 활용하여 예외처리를 하지 않는 것이 좋다 : 그냥 터지게 두라는 뜻.
  • 시스템 / 환경 자체에서 오류가 발생한걸로, '복구 불가능한' (Irrecoverable : 지금 당장 프로그램 종료 해야한다는 의미를 가진다.) 오류로 분류된다.

OutOfMemoryError

: 프로그램이 사용 가능한 할당된 메모리를 다 사용하였거나 더 이상 시스템에 여유 메모리가 없을 때 발생한다.

Exception

: Java에 존재하는 모든 예외는 해당 Exception 클래스를 상속 받는다.

ArrayIndexOutOfBoundsException

: 어떠한 배열에 대해 배열이 가지는 인덱스 범위 밖의 값을 인덱스로 사용하면 발생한다.

  • 가령 아래와 같은 상황에서 ArrayIndexOutOfBoundsException 이 발생한다.
int[] numbers = new int[] { 1, 2, 3, 4, 5 };
System.out.println( numbers[5] ); // 예외 발생
System.out.println( numbers[-1] ); // 예외 발생

IndexOutOfBoundsException

: 어떠한 리스트에 대해 리스트가 가지는 인덱스 범위 밖의 값을 인덱스로 사용하면 발생한다.

  • 가령 아래와 같은 상황에서 IndexOutOfBoundsException 이 발생한다.
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
System.out.println( numbers.get(3) );

NullPointException

: 변수가 가진 Stack 주소상의 값이 없는 참조 타입에 대해 그 멤버에 접근하였을 때 발생한다. 즉, 값이 null인 참조 타입의 변수의 멤버에 접근하면 발생한다.

  • 가령 아래와 같은 상황에서 NullPointException 이 발생한다.
Strgin someText = null;
System.out.println(someText.toUppserCase());

NumberFormatException

: 숫자에 대한 형식이 잘못되었을 때 발생한다.

  • 가령, 아래와 같은 상황에서 NumberFormatException 이 발생한다.
String numberString = "Hello World!";
int numberInt = Integer.parseInt(numberString);

의도된 예외

  • 개발자는 의도적으로 예외를 발생시킬 수 있다.

의도된 예외 구조

throw <Throwable 객체>;
  • 예제 ↓
throw new Exception("내가 고의로 던진 예외!");

커스텀 예외

: 개발자는 본인의 필요에 따라 존재하지 않는 예외를 스스로 만들 수 있다.

  • 어떠한 클래스로 하여 Exception 클래스를 상속 받도록 하면 일반 예외처럼 사용할 수 있다.

  • 이렇게 커스텀 예외를 만들어서 사용할 수 있다.
  • 생성자가 없기 때문에 불가능하다.
  • Exception이 가진 모든 생성자를 적어주면 가능해진다.

오류와 예외의 구조

     Throwable (부모)
Error			Exception 

Math 클래스

Math 클래스

: 수학과 관련된 편의 기능이 포함되어 있는 클래스이다.

  • java.lang 패키지 아래에 있음.

Math 클래스 멤버 속성

E :  <double>  오일러 수(자연상수, 자연로그 밑수)이다. 약 2.718.
PI : <double>  원주율이다. 약 3.141.

Math 클래스 메서드

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 / Long / Double / Float 클래스

Integer로 명시하지만 Integer / Long / Double / Float 도 동일하다.

Integer 클래스

  • java.lang 패키지 아래에 있음.
  • 정수(int)와 관련된 편의기능을 재공함.
  • 이 자체의 객체가 정수 값이 되기도 함.

Integer 클래스 멤버 속성

MAX_VALUE : 정수 타입(int)이 가질 수 있는 최대 값을 가지고 있다.
MIN_VALUE : 정수 타입(int)이 가질 수 있는 최소 값을 가지고 있다.
  • Integer 말고도 Long, Double 등도 가능하다.

Integer 클래스 정적 메서드

parseInt(x) : <int> 전달된 문자열 x를 정수 타입으로 반환한다.
			- 이를 정수로 변환할 수 없다면, NumberFormatException이 발생한다.
toString(x) : <String> 전달된 정수 x를 문자열로 변환하여 반환한다.
valueOf(x)  : <Integer> 전달된 정수 혹은 문자열인 x를 Integer 타입의 객체로 반환한다.
Integer.toString(123);
String.valueOf(123);   // 이 두개는 동일하게 작동한다.

String 클래스

String 클래스

: java.lang 패키지 아래에 있음.

  • 문자열과 관련된 편의 기능을 제공함
  • 두 개의 문자열 비교시 동등 비교(==) 금지

1. 비정적 메서드

✔ 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>   해당 문자열의 앞/뒤에 오는 공백을 제거한다.

2. 정적 메서드

✔ 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(정수, 문자 등)를 문자열로 변환하여 반환한다.
profile
Software Developer : -)

0개의 댓글