본문 바로가기
Backend boot camp/Session1

[JAVA]기초 - 변수, 타입, 문자열, 연산자, 콘솔 입출력

by orioncsy 2022. 9. 6.

0. JAVA Intro

개요

  • 학습 이유
    • 가장 보편적인 언어
    • 객체지향 프로그래밍 언어(OOP objective oriented programming)
  • 학습 목표
    • 자바의 4가지 특징 이해
    • JVM의 기능과 필요성 이해
    • main 메서드가 무엇인지 이해
  • 자바의 특징
    • 운영체제에 독립적 - C, C++과 다르게 JRE(JVM+표준 라이브러리) 환경에서 실행 가능
    • 객체 지향 언어(OOP) - 유지 보수 용이
    • 함수형 프로그래밍 지원 - 람다식, 스트림(컬렉션의 요소 필터, 매핑, 집계 용이, 코드 간결화)
    • 자동 메모리 관리 - garbage collector 실행하여 자동으로 비사용 메모리 수거

JVM과 JDK

  • JVM(JAVA virtual machine)
    • compiler를 통해 기계어로 변환하고 jvm으로 각 운영체제에 맞는 기계어로 변환
    • jvm은 자바 프로그램 실행하는 도구
    • 속도가 c/c++에 비해 느리지만 jvm 내부 jit 컴파일러로 속도 개선
  • JDK(java development kit)
    • JRE(Java Runtime Environment) : JVM + 표준 클래스 라이브러리
    • JDK(Java Development Kit) : JRE + 개발에 필요한 도구
    • JDK는 개발자를 위한 도구(OracleJDK, OpenJDK)

Hello, World!

  • public class Main{…}
    • public 접근제어자 / Main class
  • public static void main{String [] args){…}
    • method
      • 어떤 기능하는 코드의 묶음
      • 함수와 비슷하지만 자바는 모든 클래스 내에 작성하기 때문에 method라고 부름
    • void
      • 반환 타입 return type(반환 값의 종류)
    • String[] args
      • 매개 변수(parameter) : method 내에 데이터 입력받아 저장하는 변수
      • parameter type : String [] 매개변수 타입
      • parameter name: args 매개변수 이름
    • {…}
      • method body : 구체적으로 어떤 기능을 하는지 작성
      • return으로 값을 반환
  • method 호출
    • add(1,2);
  • main method
    • main은 가장 먼저 실행되는 method → 진입점 함수
    • 필수이고 먼저 실행된다

pseudo code(의사 코드)

  • 사람의 언어로 코드를 작성

1. variable & type

개요

  • 변수 저장 방식
    • 메모리 공간 파악 - type
    • 메모리 확보
    • 값 저장
    • 이름 - variable
  • 학습 목표
    • 타입 개념
    • 기본 타입, 참조 타입
    • 정수, 실수, 논리, 문자 타입
    • 변수, 상수, 리터럴
    • 자동 타입 변환
    • 수동 타입 변환

변수

  • 변수 : 변할 수 있는 데이터를 임시로 저장하는 수단
    • 1byte 단위로 저장 - 주소 값을 지정
  • 변수 선언과 할당
    • 변수 선언 : 저장할 메모리 공간 확보, 인식할 이름 붙이기 ( int num;)
    • 값 할당 : 변수에 값을 부여(int num =1;)
  • 변수 명명 규칙
    • CamelCase라는 규칙 사용
      • 단어 첫 부분에 대문자 사용
      • 영문자, 숫자, _, $ 사용 가능
      • 숫자로 시작하는 변수 불가
      • 이미 사용 중인 예약어 사용 불가(byte, class 등등)

상수

  • 상수 : 변하지 말아야 할 데이터를 임시 저장
    • 재할당 금지
  • 상수 명명 규칙 : SCREAMING_SNAKE_CASE 사용
    • 대문자와 _ 사용
  • 선언 : final int NUM=1;
  • 사용 이유
    • 프로그램 실행 중 변하면 안 되는 경우
    • 코드 가독성을 높이기 위해
    • 코드를 쉽게 유지 관리

타입(type)

  • 타입
    • 값이 차지하는 메모리 공간의 크기(정수, 실수, 타입)
    • 값이 저장되는 방식(기본 타입, 참조 타입)
  • 기본 타입(primitive type)
    • 실제 데이터 저장
    • 정수 타입(byte, short, int, long), 실수 타입(float, double), 문자 타입(char), 논리 타입(boolean)
  • 참조 타입(reference type)
    • 값이 저장된 주소 값 저장
    • 객체의 주소 저장, 8개 기본형 제외 나머지 타입

리터럴

  • literal
    • 문자가 가리키는 값 자체
    • float pi=3.14159f
    • long num=2395320L

정수 타입

  • byte, short, int, long
    • byte :1byte, short: 2byte, int : 4byte, long : 8byte
  • 오버플로우
    • 최댓값을 넘어서면 최솟값으로 순환
  • 언더플로우
    • 최솟값을 넘어서면 최댓값으로 순환
  • byte 125+10=-121
  • byte -125-10=121
  • 데이터 타입 크기와 표현 범위
    • 4byte의 경우 -2^31 ~ 2^31 - 1까지 표현
    • 2’s complement : 2의 보수를 취하고 1을 더해서 부호 변환
    • 0111 1111 =127 / 1000 000 000 = -128

실수 타입

  • 소수점을 가지는 float, double
  • float 타입에는 f를 붙여서 선언
    • float num= 3.1415f
    • 부동 소수점 방식 사용
    • 오차가 존재하는데 double이 더 정밀
    • (-1)^sign * (1+fraction) * 2^(exponent-bias)
    • bias=2^(bit-1)-1
    • denormalized number : 지수부 0 일 경우 → (-1)^sign * (0+fraction) * 2^(bias-1)
    • infinity : 지수부 1이고 fraction이 0인 경우
    • NaN : 지수부가 1이고 fraction이 0이 아닌 경우
  • 실수형 오버플로우, 언더플로우
    • 해당 범위를 넘어가면 오버플로우/ 0과 가까이 표현되지 못한 수는 언더플로우

논리 타입

  • boolean : tree or false 구분
  • 1bit면 되지만 jvm 최소 단위가 1byte 이므로 1byte 차지

문자 타입

  • char : 2byte 크기
  • 작은따옴표 ‘’ 사용
  • 하나 문자만 저장 가능
  • 유니코드로 저장
  • 숫자 할당할 수 있지만 유니코드에 해당하는 문자열 반환

타입 변환

  • 자동 타입 변환
    • 바이트 크기가 작은 타입에서 큰 타입으로 변할 때
    • 덜 정밀한 타입에서 더 정밀한 타입으로 변할 때
    • byte(1) -> short(2)/char(2) -> int(4) -> long(8) -> float(4) -> double(8)
  • 수동 타입 변환
    • 큰 타입에서 작은 타입으로 변환할 때 자동 타입 변환 불가
    • 캐스팅 : ()를 사용하여 수동 변환
  • string to int : Integer.parseInt(…)
  • int to string : Integer.toString(…)

2. String

개요

  • 학습 목표
    • String 이해
    • String 선언
    • String method 이해
    • String tokenizer 이해
    • String builder, buffer 이해

String 타입의 변수 선언과 할당

  • String 선언
    • String 타입 선언과 “”(큰 따옴표)로 감싸진 문자열 리터럴 할당
      1. 문자열 리터럴 할당 : 변수 = “문자열”;
      2. String 클래스의 인스턴스 할당 : 변수 = new String(”문자열”);
    • 참조 타입 변수 : 실제 문자열 값을 가지는 것이 아니라 주소 값 저장
    • String 클래스 메서드인 toString()이 자동 호출되어 주소 값에 위치한 인스턴스 내용 문자열 반환
  • ==(좌항 우항 값 같은지 확인) / .equals() (문자열의 내용을 비교)
    • 동일한 리터럴 문자열은 같은 문자열의 참조값을 갖게 된다.
    • 인스턴스를 생성하는 경우 문자열이 같아도 별개의 인스턴스 생성

String 클래스의 메서드

  1. charAt()
    1. 해당 인덱스의 문자 출력
  2. compareTo()
    1. 문자열 사전 순으로 비교
    2. 해당 문자열이 인수보다 작으면 음수, 같으면 0, 크면 양수
    3. 대소문자 구분이 default
    4. compareToIgnoreCase()로 대소문자 구분 안 하고 비교 가능
  3. concat()
    1. 해당 문자열을 뒤에 인수를 연결
  4. indexOf()
    1. 해당 문자열에서 인수에 들어간 문자의 인덱스 출력
  5. trim()
    1. 공백 문자 제거
    2. 원본은 변하지 않음
  6. toLowerCase() / toUpperCase()
    1. 소문자로 변경 / 대문자로 변경
    2. 원본은 변하지 않음

StringTokenizer

  • 문자열을 지정한 구분자를 기준으로 쪼개 주는 클래스
  • import java.util.StringTokenizer;
  • StringTokenizer tokenizer=new StringTokenizer(str, “구분자”);
    • default는 공백
  • int countTokens()
    • 남아있는 토큰의 개수를 반환
  • boolean hasMoreElements(), boolean hasMoreTokens()
    • 현재 위치 뒤에 있는 문자열 중 하나 이상 토큰을 사용 가능하면 true, 아니면 false 반환
  • Object nextElement(), String nextToken()
    • 다음 토큰 반환

StringBuilder

  • 인스턴스를 계속 더하는 상황에서 사용
  • StringBuilder strb=new StringBuilder();
  • .append()로 연결해서 사용
  • 변수에 저장할 때는 toString()를 사용하여 할당

StringBuffer

  • String 클래스는 한번 생성하면 읽기만 가능하고 수정 불가, StringBuffer는 수정 가능
  • 기본 16문자에, 생성자에 크기 지정 가능
  • 크기 지정해도 16문자 여유 공간 자동 확보
  • String에 +를 통해 연결하면 형 변환으로 속도가 느리지만 StringBuffer는 빠른 속도
  • append()
    • 뒤에 문자열 연결
  • capacity()
    • 현재 버퍼 크기 반환
    • 문자 크기 + 16으로 반환
  • delete()
    • 첫 번째 인수 인덱스부터, 두 번째 인수 인덱스 전까지 문자열 삭제
    • deleteCharAt()으로 문자열 하나 삭제 가능
  • insert()
    • 첫번째 인수의 인덱스부터 두번째 인수 문자열 삽입

'Backend boot camp > Session1' 카테고리의 다른 글

[JAVA] 객체 지향 프로그래밍 기초  (0) 2022.09.06
[JAVA] 기초 - 배열  (0) 2022.09.06
[Git] 기초  (0) 2022.09.06
[Linux] 기초  (0) 2022.09.06
[Publishing]HTML, CSS  (0) 2022.08.23