본문 바로가기
CodeStatesBootCamp/Review

Section 1 - Unit 4 : [Java] 기초 Review

by JKROH 2023. 2. 17.
반응형
Review 에서는 학습한 내용을 다시금 기록합니다.
Unit Review는 학습한 내용 중 기존에 알고 있었지만 정확하게 이해하지 못하던 정보와 새롭게 알게된 정보를 기록합니다. 추가적인 설명을 요하는 부분은 댓글로 남겨주세요.
Section Review는 전반적인 Section을 되돌아보고 학습했던 시간과 과정, 내용을 총괄하여 기록합니다.

<<Java 기초>>


Java Intro

* 자바의 특징

- 운영체제에 독립적

  • 기존의 프로그래밍 언어는 특정 CPU에서만 작동하거나 OS에 따라 다르게 작성해야했다.
  • 그러나 자바는 JRE가 설치되어 있는 모든 운영체제에서 실행이 가능하다.

- 객체 지향 언어

  • 자바는 객체지향 프로그래밍 개념을 사용하는 언어이다.
  • 객체 지향적으로 설계된 프로그램은 유지보수가 쉽고 확장성이 높다.

- 함수형 프로그래밍 지원

  • 자바 8 버전부터 lamda식과 stream이 추가되어 함수형 프로그래밍을 사용할 수 있다.
  • 이들은 Collection의 요소를 필터링, 매핑, 집계 처리하기 쉽게 하고 코드를 간결하게 짤 수 있게 도와준다.

- 자동 메모리 관리 (Garbage Collection)

  • 자바는 자동으로 메모리를 관리하는 Garbage Collector가 불필요한 메모리를 수거한다.
  • 따라서 개발자는 메모리를 관리하는 대신 핵심 코드에 더 집중할 수 있다.

* JVM과 JDK

- JVM (Java Virtual Machine)

  • 자바 언어는 JVM이 이해할 수 있는 언어로 컴파일 된다.
  • JVM은 변환된 언어를 각 운영체제에 맞는 기계어로 변환하고 자바 프로그램을 실행한다.
  • 따라서 자바는 운영체제에 독립적으로 작성하고 실행될 수 있다.

- JDK (Java Development Kit)

  • JDK는 말 그대로 Java로 개발하기 위한 도구이다.
  • JDK와 JRE(Java Runtime Environment)의 차이는 JDK는 자바로 개발하기 위해 필요한 툴이라면 JRE는 자바 프로그램을 실행하기 위한 툴이다. 따라서 자바 프로그램을 실행만 할 것이라면 JDK는 설치하지 않아도 된다.

문자열 (String)

* String 타입의 변수 선언과 할당

  • String 변수에 문자열을 할당하는 방법은 두 가지가 있다.
    • String 변수명 = "문자열 리터럴";
    • String 변수명 = new String("문자열 리터럴");
  • 이 때, 문자열 리터럴을 직접 할당하는 방법은 문자열이 존재하는 메모리 공간 상의 주소 값을 저장하고 있다.
  • 따라서 String a = "123"; String b = "123"; 이라고 선언된 두 변수는 같은 메모리 주소를 가르킨다.
  • 그러기 때문에 a와 b를 비교할 때 a.equals(b)가 아닌 a==b 를 이용해도 true가 나온다.

* String 클래스의 메서드

- compareTo()

  • str.compareTo(String param) 는 str과 param을 사전 편찬 순으로 비교한다.
  • 이 때, 대소문자를 비교하여 구분하며 대문자가 소문자보다 더 앞에 있다. (사전 편찬 순으로 왜 대문자가 더 앞인지 이해가 잘 안된다면 ASCII코드 값이 대문자가 더 작은 것으로 생각하자)
  • 두 문자열이 같으면 0, parameter > str 이면 음수를, parameter < str 이면 양수를 반환한다.
  • 대소문자 구분을 원하지 않는다면 str.compareToIgnoreCase(String param)를 이용한다.

- concat()

  • str.concat(String param) 은 str 뒤에 param을 추가한 새로운 문자열을 반환한다.
  • 이 때 param이 ""라면 str을 그대로 반환한다.

- trim()

  • str.trim()은 str 맨 앞과 맨 뒤에 포함된 모든 공백 문자를 제거한다.

* StringTokenizer

  • StringTokenizer는 문자열을 지정자로 쪼개주는 클래스이다.
  • 따라서 StringTokenizer를 사용하기 위해서는 java.util.StringTokenizer를 import 하고 생성자를 통해 객체로 초기화하여 사용해야 한다.
  • StringTokenizer의 생성 방식에는 아래의 3가지가 있다.
    • StringTokenizer st = new StringTokenizer(String param);
    • StringTokenizer st = new StringTokenizer(String param, String delimeter);
    • StringTokenizer st = new StringTokenizer(String param, String delimeter, boolean isDelimeterInsert);
      • 이 방법을 통해 StringTokenizer를 선언하면 구분자 역시 토큰으로 분리되어 StringTokenizer에 포함된다.
      • 예를 들어 StringTokenizer st = new StringTokenizer("문!자!열", "!", true); 라는 코드를 실행시키면 st 내부에는 문, !, 자, !, 열 이 들어가게 된다.

- StringTokenizer에서 자주 사용하는 메소드

  • StringTokenizer st = new StringTokenizer("How to use StringTokenizer"); 를 통해 초기화하였음을 가정하고 진행한다.
  • int countTokens()
    • 남아있는 token의 개수를 반환한다. 전체 token의 수가 아닌 점에 유의한다.
  • boolean hasMoreTokens()
    • 현재 index 뒤에 남아있는 토큰이 있는지를 반환한다.
  • String nextToken()
    • 다음 index의 토큰을 반환한다.

* StringBuilder / StringBuffer

  • 한번 생성된 String 클래스의 인스턴스는 여러 개의 문자열을 더할 때 매번 새로운 인스턴스를 생성해야 한다.
  • 만약 100만개의 문자열이 있는데 모두 더하는 작업이 필요하다면 인스턴스 생성과정은 100만번 이루어져야 하기 때문에 매우 비효율적이다.
  • 또한 String은 immutable하기 때문에 이를 mutable 하게 이용하기 위해서도 Stringbuilder / StringBuffer를 사용한다.

- StringBuilder

  • StringBuilder 역시 생성자를 통해 객체로 초기화하여 사용해야 한다.
  • StringBuilder의 생성 방식에는 아래의 2가지가 있다.
    • StringBuilder sb = new StringBuilder();
    • StringBuilder sb = new StringBuilder(String param);
      • parameter를 미리 sb에 저장한다.
  • 아래의 예시에선 StringBuilder sb = new StringBuilder();로 초기화를 한 상태라고 가정한다.
  • sb.append(String param) 을 통해 문자열을 추가할 수 있다.
  • sb.toString() 을 통해 하나의 문자열로 바꿀 수 있다.

- StringBuffer

  • StringBuffer 역시 생성자를 통해 객체로 초기화하여 사용해야 한다.
  • 생성 방식은 StringBuilder와 같다.
  • str.capacity() 는 현재 StringBuffer의 크기를 반환한다.
    • StringBuffer는 기본적으로 여유 버퍼 크기인 16을 가지고 있다.
    • 예를 들어, new StringBuffer("Java").capacity(); 는 20을 반환된다.
  • str.delete(int startIndex, int endIndex) 는 stratIndex 부터 endIndex-1까지의 부분 문자열을 해당 문자열에서 제거한다.
    • 예를 들어, new StringBuffer("Hello World!").delete(2,9)는 "Hold"가 된다.
  • str.deleteCharAt(int index) 는 해당 index의 문자 하나를 제거한 문자열을 반환한다.
  • sb.insert(int offset, String param) 은 offset에 해당하는 index에 param을 더한다.
    • 이 때 offset이 문자열의 길이와 같으면 마지막에 param을 이어 append()와 같은 결과를 반환한다.
반응형

댓글