ㅇㅇ

김상욱·2024년 7월 21일
0

var 변수

var 변수는 생성시 반드시 초기화 필요. 지역변수로만 사용 가능.

문자열 풀

문자열 풀(String Pool)은 자바와 같은 언어에서 문자열을 효율적으로 관리하기 위한 메모리 영역을 말합니다. 문자열 풀은 같은 문자열 리터럴을 재사용하여 메모리 사용을 최적화하는 역할

new 명령어 사용 시 힙에 객체를 새로 만든다.

유니코드 필수 암기

  • A : 65
  • a : 97

Multi Line

여러 줄을 끊기지 않고 타이핑 하기 위해서는 """ """을 사용할 수 있다. 한 줄의 끝에서 .를 넣으면 가능하다.

자주 쓰지만 잘 모르겠는 String 클래스 메서드

String subString(int beginIndex)
String subString(int beginIndex, int endIndex)
bollean equalsIgnoreCase(String another)
int indexOf(String str) : 지정된 문자열이 처음으로 나타나는 인덱스 반환
int lastIndexOf(String str)
boolean contains(CharSequence s)
String toLowerCase()
String toUpperCase()
String trim()
String replace(char oldChar, char newChar)
String replace(CharSequence target, CharSequence replacement)
String[] split(String regex)
boolean startsWith(String prefix) 지정된 접두사로 시작하는지 검사
boolean endsWith(String suffix)
boolean isEmpty()
int compareTo(String anotherString) : 사전순으로 두 문자열을 비교
String formatted(var...)
String[] toCharArray(String str)

CharSequence와 String, StringBuffer, StringBuilder

CharSequence

String, StringBuffer, StringBuilder들의 공통 함수 구현의 선언을 가지고 있는 인터페이스

String

불가변 - 변경불가

StringBuilder, StringBuffer

가변 - 자주 변경할 때 사용
StringBuilder - 멀티스레드 환경에서 위험함(synchronized x), 성능면에서 좋음
StringBuffer - 멀티스테드 환경에서 안전(synchronized)

synchronized : 동기화를 제공하는 키워드, 멀티스레드 환경에서 여러 스레드가 공유된 자원에 동시에 접근할 때 발생할 수 있는 문제 해결. 메서드나 블록을 보호하여 한번에 하나의 스레드만 해당 코드에 접근할 수 있도록 함.

자주 쓰지만 잘 모르겠는 StringBuilder, StringBuffer 함수

  • 표현은 StringBuilder로 통일
    StringBuilder()
    StringBuilder(int capacity) : 지정된 초기 용량으로 객체 생성
    StringBuilder(String str) : 초기 문자열로 객체 생성
    append(String str)
    append(char c)
    append(int i)
    insert(int offset, String str) : 지정된 위치에 문자열을 삽입
    setCharAt(int index, char ch) : 지정된 위치의 문자를 변경
    replace(int start, int end, String str) : 지정된 범위의 문자열을 대체
    delete(int start, int end) : 지정된 범위의 문자열을 삭제
    deleteCharAt(int index) : 지정된 위치의 문자를 삭제
    String toString() : String으로 변환하여 반환
    in length() : 문자열 길이 반환
    in capacity() : 현재 용량을 반환
    ensureCapacity(int minimumCapacity) : 최소 용량을 보장
    setLength(int newLength) : 문자열의 길이를 설정. 길이를 늘리면 새로운 문자 추가, 줄이면 문자열 잘림.
    int indexOf(String str) : 지정된 문자열이 처음으로 나타나는 인덱스 반환
    int indexOf(String str, int fromIndex) : 지정된 인덱스로부터 검색하여, 문자열이 처음으로 나타나는 인덱스를 반환.
    int lastIndexOf(String str)
    String substring(int start)
    String substring(int start, int end)

StringTokenizer vs String.split()

StringTokenizer

StringTokenizer(String str) : 공백문자를 구분자로 사용하여 문자열을 토큰으로 나눔
StringTokenizer(String str, String delim) : 지정된 구분자를 사용하여 문자열을 토큰으로 나눔
StringTokenizer(String str, String delim, boolean returnDelims) : 지정된 구분자를 사용하여 문자열을 토큰으로 나누며, 구분자도 토큰으로 반환할지 여부를 지정
hasTokens() : 다음 토큰이 있는지 확인.
nextToken() : 다음 토큰을 반환.
countTokens() : 남아 있는 토큰의 수를 반환.

StringTokenizer vs String.split()

  • 멀티스레드 : StringTokenizer는 멀티스레드 환경에서 직접 동기화하지 않으면 안전하지 않고 String.split()은 스레드 안전이 필요하지 않다.
  • 성능 : String.split()은 정규 표현식을 사용하기 때문에, 성능이 떨어질 수 있습니다. 정규 표현식을 컴파일 하는 오버헤드가 있기 때문이다.

    오버헤드 : 컴퓨터 시스템의 성능이나 자원 측면에서 추가적인 비용이나 부담

실수의 연산

실수의 연산 시, 해당 실수를 10의 제곱 단위를 곱하여 정수에서 연산을 하는 것이 좋거나 BigDecimal 인터페이스를 이용해서 계산하는 것이 좋다.

BigDecimal a=BigDecimal("2.0");
BigDecimal b=BigDecimal("2.0");
System.out.println(a.subtract(b));

Wrapper 클래스 주요 메서드 & 상수

parseXXX(String s) : 문자열을 XXX 타입으로 변환.
valueOf(String s) : 문자열을 XXX 타입의 Wrapper 객체로 변환.
toString(XXX i) : 해당 값을 문자열로 변환.
XXXValue() : Wrapper 객체를 해당 타입으로 변환.
compareTo(XXX anotherInteger) : 두 XXX 객체를 비교.
compare(XXX a, XXX b) : 해당 기본 타입의 크기 비교.
MIN_VALUE / MAX_VALUE : 해당 객체의 최대, 최소 값

&&,|| 연산과 &,| 연산

비트 연산이 아닌 boolean형의 연산의 경우, &&,|| 연산은 앞의 연산을 실행하고 결과에 뒤의 연산이 영향을 미치지 않는다면 뒤의 연산을 시행하지 않지만, &,|연산은 앞의 결과와 무관하게 뒤의 연산을 시행한다.

Switch Expressions

int a=0;
int k=switch(a){
	case 1 -> 10;
    case 2 -> 20;
    case 3,4,5 -> 30;
    default -> {
    	yield 40;
    }
};

yield는 반드시 블록 안에서 사용가능하다. 블록을 사용하는 경우에는 yield를 사용해 반환하는 것이다.

정수형 타입만 switch(____)위치에 가능 : char, int, byte, short

Arrays 자주 쓰는 함수

static void sort(int[] a)
static void sort(int[] a, int fromIndex, int toIndex)
static void sort(T[] a) : Comparable 인터페이스를 구현해야 한다.
static void sort(T[] a, Comparator<? super t> c)

static int binarySearch(int[] a, int key) : 정렬된 배열에서 key를 탐색
staitc int binarySearch(T[] a, T key, Comparator<? super T> c)

static int[] copyOf(int[] orginal, int newLength)
static T[] copyOf(T[] original, int newLength)
static int[] copyOfRange(int[] original, int from, int to)
static copyOfRange(T[] original, int from, int to)

static boolean equals(int[] a, int[] a2)
static boolean equals(Object[] a, Object[] a2)

static void fill(int[] a, int val)
static void fill(int[] a, int fromIndex, int toIndex, int val)
static void fill(T[] a, T val)

static String toString(int[] a)
static String toString(Object[] a)

static int hashCode(int[] a)
static int hashCode(Object[] a)

Array 초기화 시 오류

선언과 생성 따로 처리할 시 컴파일 오류 / 선언 시 배열의 크기를 알 수 없을 때

배열의 복사

void System.arrayCopy(Object src, int srcPos, Object dest, int destPos, int length) : 복사하려는 배열의 크기가 복사되는 크기를 length를 통해 넘어가면 에러가 발생한다.
int[] Arrays.copyOf(int[] original, int newLength)

0개의 댓글