[TIL] 코드스테이츠 SEB BE Day 7

💡 Today I Will Learn

  • Java Type, String
  • Java Operator, I/O
  • Pair Programming

✏️ Summary


  • Why Java?

    1996년 1월에 출시한 객체지향 프로그래밍(Object Oriented Programming) 언어
    운영체제에 독립적으로 실행가능한 이점으로 Write Once, Run Anywhere 이라는 슬로건을 내세워 전세계의 많은 사용자를 모음

    • 자바의 특징
      1. OS에 독립적
        이전 언어들은 특정 환경에서만, 환경에 따라 다르게 작성해야 하는 언어들이었다.
        JRE(Java Runtime Environment: JVM + 표준클래스 라이브러리)가 설치된 모든 OS에서 실행 가능토록 만들었다.
      2. OOP
        모든 기능을 객체로 만들어 사용해야 한다. 객체는 프로그램안의 각각의 부품들이라고 생각하면 편한다. 객체를 조립하여 하나의 프로그램을 실행하는 개념이다. 객체 지향적으로 프로그래밍하면 유지보수가 쉽고 확장성이 높다.
      3. 함수형 프로그래밍 지원
        JAVA8 부터 함수형 프로그래밍을 지원하는 람다식과 스트림이 추가되었다. 이를 통해 Collection의 필터링, 매핑, 집계 등 처리가 쉬워지며 코드가 간결해진다.
      4. Garbage Collectioin
        C++보다 개선하자는 목표로 메모리는 자동으로 관리해주는 기능을 추가하였다. 이전에는 개발자가 메모리의 생성과 소멸을 직접 담당해야했다. 하지만 JAVA는 Garbage Collector가 사용하지 않는 메모리를 자동으로 해제한다.
    • JVM (Java Virtual Machine)
      컴파일러가 번역한 바이트코드를 JVM에 OS에 맞는 기계어로 변환

      자바_컴파일구조

      • JVM은 자바 코드로 작성된 프로그램을 해석해 실행하는 ‘별도의’ 프로그램
      • 프로그램은 OS가 정한 규칙을 따라야하고, 각각의 OS의 규칙을 따르려면 별도의 절차가 필요하므로 JVM이 이를 해결한다.
      • JVM은 JRE나 JDK를 설치하면 자동으로 설치된다. JAVA는 JVM을 거치기에 C,C++보다 속도가 느리다. JVM 내부 최적화된 JIT 컴파일러를 통해 속도 개선
    • JDK와 JRE
      JDK(Java Development Kit): JRE + 개발에 필요한 도구
      JRE(Java Runtime Environment): JVM + 표준클래스 라이브러리
      자바 프로그램만 실행할 것이라면 JRE, 자바 프로그램을 개발할 것이라면 JDK
  • Java Primitive Type

    데이터의 종류와 크기를 결정짓는 것

    • 정수형

      TypeSize
      byte1byte
      short2byte
      int (default)4byte
      long8byte
    • 실수형

      TypeSize
      float4byte
      double (default)8byte

      Double이 Float보다 정확하고, 저장공간이 크다.

    • 논리형

      TypeSize
      boolean1byte
    • 문자형

      TypeSize
      char2byte
  • String

    자바는 String을 클래스 타입을 이용하여 다룬다.

    리터럴로 담느냐, 인스턴스화 하느냐의 차이로 == 비교연산자의 결과가 다르다.

    • String method

      MethodDescription
      char charAt(int index)특정 인덱스에 해당하는 문자
      int compareTo(String str)사전순으로 비교하여 같다면 0, 작으면(앞에 위치) 음수, 크면(뒤에 위치) 양수
      String concat(String str)인수로 전달된 문자열을 추가하여 반환
      int indexOf(int or ch or String str)문자열에서 특정 문자나 문자열이 처음으로 등장하는 인덱스
      String[] split(String regex)정규표현식에 따라서 나눠 반환
      String substring(int begin, int end)begin 부터 end까지 새로운 문자열로 대체
      String trim()문자열 앞뒤의 모든 공백 제거
      String toLowerCase(), String toUpperCase()문자열을 소/대문자로 변경
  • StringTokenizer

    지정한 구분자로 문자열을 쪼개주는 ‘클래스’ 이렇게 쪼개진 문자열은 token이라고 부른다.

    • StringTokenizer method

      MethodDescription
      int countTokens()남아있는 token의 개수 반환
      boolean hasMoreElements() / boolean hasMoreTokens현재 위치 뒤에 있는 문자열에서 하나 이상의 토큰이 남아있으면 true
      동일한값을 반환하며 성능차이는 없다
      object nextElement() / String nextToken()다음 토큰을 반환한다
      다음 토큰을 반환하며 같은 동작이나 반환형이 다르다.
  • StringBuilder / StringBuffer

    String 클래스의 인스턴스는 여러 문자열을 연산할 때 매번 새로운 인스턴스를 생성해야 하기에 비효율적이다.
    또한 String 인스턴스가 생성되면 변경할 수 없다.(immutable)
    따라서 가변적인(mutable) 아래 두 클래스를 사용하면 효율적이다.

    • StringBuilder
      문자열 연산이 일어날 때 한 인스턴스 내에서 공간이 유동적으로 변한다
    • StringBuffer
      내부적으로 Buffer라는 독립적인 공간을 가진다. (default 16개의 문자저장)

    두 클래스의 큰 차이는 동기화의 유무
    Stringbuffer는 동기화키워드를 지원하여 멀티쓰레드환경에서 안전하다.(thread-safe)
    StringBuilder는 동기화를 지원하지 않아 고려하지 않는 만큼 단일쓰레드에서의 성능은 뛰어나다.
    물론 String 클래스도 immutable하기에 멀티쓰레드환경에서 안전하다.

    • StringBuffer method

      TypeSize
      StringBuffer append(String str)인수로 전달된 값을 문자열로 변환 후, 마지막에 추가한다.
      int capacity()해당 인스턴스의 현재 buffer의 크기
      StringBuffer delete(int start, int end)전달된 인덱스에 해당하는 부분 문자열을 제거한다.
      StringBuffer deleteCharAt(int index)특정위치의 문자 한개를 제거한다.
      StringBuffer insert(int index, String str)인수로 받은 문자열을 지정된 인덱스 위치에 추가한다.
  • 콘솔 입출력(IO)

    • 콘솔 출력
      1. System.out.print()
      2. System.out.println()
      3. System.out.printf()
        [option: %b(boolean) %d %o %x %c %s %n]
    • 콘솔 입력

      import java.util.Scanner;// Scanner 클래스 호출
      
      Scanner scanner = new Scanner(System.in); // Scanner 클래스의 인스턴스를 생성
      String inputValue = scanner.nextLine(); // 입력한 내용이 inputValue에 저장
      
      1. import java.util.Scanner;
        데이터 입력받는 기능을 만들어놓은 클래스가 Scanner이다.
      2. Scanner scanner = new Scanner(Stytem.in);
        Scanner 객체의 이름인 scanner에 new 연산자로 인스턴스를 만든다.
      3. String inputValue = scanner.nextLine();
        nextLine() 메서드는 콘솔을 통해 문자열 데이터를 입력받는 기능을 수행한다. (nextInt(), nextFloat() 등의 메서드도 존재)
  • Java Foundation

    Java 강의 내용 중 빠르게 지나간 내용을 정리한다.

    • 변수 (Variable)
      타입이 데이터의 종류, 변수는 데이터 저장공간

      • 선언과 할당
        ‘=’ 대입연산자를 통해 저장

      • 변수명 규칙
        camelCase : 낙타 등 모양을 닮은 형식(첫소문자, 두번째 단어부터 대문자)으로 정의한다.

      • 불가능한 변수명
        예약어, 숫자로 시작하는, 공백이 포함된 등.

    • 상수 (Constant)
      변하지 않는 수이며 변하면 안되는 수이다.
      자바에서의 상수는 final 키워드를 사용한다.
      명명은 일반적으로 SCREAMING_SNAKE_CASE와 같이 대문자와 _ 언더스코어로 구성한다.

    • 리터럴 (Literal)
      ‘문자 그대로의’ 라는 뜻으로 문자가 가리키는 값 그 자체로 타입을 결정한다.
      default 값은 다음과 같다.
      • 정수형: int
      • 실수형: double
      • 논리형: false
    • 타입변환
      • 묵시적 변환
        1. 작은 타입 -> 큰타입
        2. 덜 정밀한 -> 정밀한 (정수-> 실수)
      • 명시적 변환(casting)
        () 캐스팅 연산자를 통해 변환
    • 연산자
      1. 산술 연산자: +, -, *, /, %(modulo)
      2. 비교 연산자
        • 대소 비교 연산자: >, >=, <, <=
        • 등가 비교 연산자: ==, !=
        • 조건 연산자 (삼항연산자): (조건) ? (참) : (거짓)
      3. 연산자 우선순위

        연산자 우선순위
        괄호( (), [] )
        부정/증감 연산자( !, ~, ++, – )
        곱셈/나눗셈
        대소 비교 연산자
        AND 연산자( && )
        OR 연산자( || )
        조건 연산자
        대입/할당 연산자( =, +=, -=, /=, %= )

📌 정리


Java 기초 수업이라 어려운 점은 없었고, 더해서 물론 다가올 Java 수업도 큰 문제는 없을 것이라 생각한다😀 다만 알고있는 문법이라고 지나치지 않고, 복습차원에서 블로깅으로 정리해놓으려 한다.

🎯 Next Friday


  • Java 조건문
  • Java 반복문

Back to [TIL] 코드스테이츠 SEB BE Day 6