변수&타입&문자열&연산자

InSeok·2022년 7월 4일
0

TIL

목록 보기
7/51

학습목표


  • 자바 기초문법 이해
  • 문자열 메서드사용법
  • 변수와 자료형에대한 이해와 자료형 변환
  • 산술, 비교, 논리 연산자

배운 내용


Java

  • 객체지향 프로그래밍(Object Oriented Programming, OOP)언어(~1996)

특징

1. 운영체제에 독립적

  • JRE(Java Runtime Environment: JVM(자바 가상머신) + 표준 클래스 라이브러리)가 설치되어 있는 모든 운영체제에서 실행이 가능

2. 객체 지향 언어(Object Oriented Programming, OOP)

  • 객체는 프로그램이 동작하는 부품으로, 모든 기능은 객체로 만들어 사용해야 한다
  • 여러 부품(객체)들을 만들고 조립하여 하나의 프로그램을 실행
  • 객체 지향적으로 설계된 프로그램은 유지보수가 쉽고 확장성이 높습니다.

3. 함수형 프로그래밍 지원

  • 람다식과 스트림을 사용해 컬렉션의 요소를 필터링, 매핑, 집계 처리하기 쉬워지고 코드가 간결해진다.

4. 자동 메모리 관리(Garbage Collection)

  • 가비지 컬렉터(Garbage Collector)를 실행시켜 자동으로 사용하지 않는 메모리를 수거

JVM(Java Virtual Machine)

  • 자바는 컴파일러(Compiler)를 통해 기계어(Machine Language)로 변환되는 언어
    • 자바 언어를 JVM(Java Virtual Machine)이 이해할 수 있는 코드(바이트코드, Bytecode)로 변환
    • JVM은 바이트코드를 운영체제에 맞는 기계어로 변환
  • 프로그램이 제대로 실행되기 위해서는 컴퓨터의 다양한 자원(CPU, RAM, 각종 입출력 장치 등)을 활용해야 하는데, 이런 자원을 OS가 관리한다.
  • OS별 규칙을 따르는 별도의 절차가 필요한데, JVM으로 문제 해결

JDK(Java Development Kit)

  • JRE(Java Runtime Environment) : JVM + 표준 클래스 라이브러리
    • 자바프로그램 실행
  • JDK(Java Development Kit) : JRE + 개발에 필요한 도구
    • 자바프로그램 실행 + 개발

메서드

  • 어떤 기능을 수행하기 위한 코드들을 묶어놓은 것’이며, 여기에서 ‘어떤 기능을 수행한다’는 것은 데이터를 입력받아 입력 받은 데이터에 일련의 처리를 가한 후, 그 결과값을 반환하는 것을 의미
반환_타입 메서드_이름(매개변수_타입 매개변수_이름) {
	메서드_바디
}
  • 함수 : 특정 기능을 수행하는 코드들을 묶은 것
    메서드 : 클래스 내에 포함되어 있는 함수
  • 매개변수 : 메서드 외부에서 메서드 내부로 전달한 값을 할당받아 저장함으로써, 메서드 내부에서 사용할 수 있게 해준다.

메서드 호출

  • 메서드는 정의하는 것만으로는 실행되지 않는ㄷ.
  • 메서드를 실행시키려면 호출을 해주어야 합니다.
  • 자바에서 main 메서드는 진입점 함수이며, 자바로 어떤 소스 코드를 작성할 때 반드시 main 메서드가 있어야 하고, main 메서드로부터 코드의 흐름이 시작

컴퓨터가 메모리에 어떤 값을 저장하는 과정

  1. 기억하고자 하는 값이 얼만큼의 메모리 공간을 필요로 하는지 파악합니다.
  2. 기억하고자 하는 값이 차지하는 용량만큼의 메모리 공간확보합니다.
  3. 확보한 메모리 공간에 기억하고자 하는 값을 저장합니다.
  4. 값을 저장한 공간이름을 붙입니다.
  • 메모리는 1byte 크기의 데이터를 저장할 수 있는 메모리 셀들이 모여서 만들어지며, 각 메모리셀에는 고유 번호가 오름차순으로 매겨져 있습니다. 이처럼 메모리셀에 붙여져 있는 고유 번호를 메모리 주소라고 합니다.

변수

  • 값이 변할 수 있는 데이터를 임시적으로 저장하기 위한 수단

변수 선언

  • 데이터 타입과 함께 변수 이름을 작성
    • int num; // 변수 선언
  • 변수를 선언하면 컴퓨터는 값을 저장할 메모리 공간을 확보하고, 확보한 메모리 공간에 사용자가 입력한 변수 이름으로 이름을 붙입니다.

값 할당

int num; // 변수 선언
		num = 1; // 초기화
		num = 2; // 재할당

int num = 1; // 선언과 동시에 초기화

상수(Constant)

  • 변하지 말아야 할 데이터를 임시적으로 저장하기 위한 수단
  • 재할당 금지
  • final이라는 키워드를 사용해 선언
  • 관례적으로 대문자에 언더바(_)를 넣어 구분(스네이크기법)

상수를 사용하는 이유

  • 프로그램이 실행되면서 값이 변하면 안되는 경우
  • 코드 가독성을 높이고 싶은 경우
  • 코드 유지관리를 손쉽게 하고자 하는 경우
    • 상수를 사용하면 상수에 할당할 값만 바꿔주면 된다.

타입

  • 값이 차지하는 메모리 공간의 크기와, 값이 저장되는 방식 결정

기본 타입(primitive type)

  • 값을 저장할 때, 데이터의 실제 값이 저장
  • 정수, 실수 ,문자, 논리

참조 타입(reference type)

  • 값을 저장할 때, 데이터가 저장된 곳을 나타내는 주소값이 저장
  • 기본형 외 나머지 타입

리터럴(Literal)

  • 문자가 가리키는 값 그 자체
  • ‘값’이라는 표현 대신에 리터럴이라는 표현

정수 타입

정수형의 오버플로우와 언더플로우

  • byte(1byte)
  • short(2byte)
  • int(4byte)
  • long(8byte)
  • long타입의 변수에 정수형 리터럴을 할당할 때, 리터럴 뒤에 접미사 L을 붙여주어야 합니다

오버플로우

  • 자료형이 표현할 수 있는 범위 중 최대값 이상의 값을 표현한 경우 발생
  • 최대값을 넘어가면 해당 데이터 타입의 최소값으로 값이 순환
  • byte형일때, 최대값인 127을 값으로 가지는경우, 1을 더하면 128이되는게 아니라, 최소값인 -128이된다.

언더플로우

  • 자료형이 표현할 수 있는 범위 중 최소값 이하의 값을 표현한 경우 발생
  • 최소값을 넘어가면 해당 데이터 타입의 최대값으로 값이 순환
  • byte형일때, 최솟값인 -128을 값으로 가지는경우, 1을 빼면 -129가 아니라 최대값인 127이된다.

실수 타입

  • float(4byte)
  • double(8byte)
  • float 타입의 변수에 실수형 리터럴을 할당할 때, 리터럴 뒤에 접미사 f를 붙여주어야 합니다
  • double형은 float형보다
  1. 더 큰 실수를 저장할 수 있습니다.
  2. 더 정확하게 저장할 수 있습니다.

논리 타입(boolean)

  • boolean(1byte)
    • true / fasle

문자 타입(character)

  • char(2byte)
    • 하나의 문자형 리터럴 저장
    • 반드시 ‘ ’ 사용
  • 컴퓨터는 0과 1밖에 저장 못한다. 그러면 어떻게 문자타입 변수를 저장할까?
    • 자바는 유니코드로 문자를 저장

    • char letter1 = ‘a’;와 같이 문자형 리터럴을 문자형 변수에 할당하면 letter1
      에는 영문자 a의 유니코드 숫자값이 저장

    • 숫자를 문자형 변수에 할당하면, 해당 숫자가 그대로 저장되지만, 나중에 변수를 참조할 때, 즉 변수의 값을 읽어올 때 해당 변수가 저장하고 있는 숫자값을 유니코드로 인식하여 해당 숫자와 일치하는 코드를 가진 문자로 변환

      char letter = 65;
      System.out.print(letter); // 출력 결과 : A

타입 변환

타입 변환

자동 타입 변환

  1. 바이트 크기가 작은 타입에서 큰 타입으로 변환할 때 (예 : byteint)
  2. 덜 정밀한 타입에서 더 정밀한 타입으로 변환할 때 (예 : 정수 → 실수)

byte(1) -> short(2)/char(2) -> int(4) -> long(8) -> float(4) -> double(8)

수동 타입 변환(캐스팅)

  • 캐스팅 연산자 ()
    • () 변환하고자 하는 타입 작성

      //int 타입으로 선언된 변수 intValue를 더 작은 단위인 byte로 변환합니다.
      int intValue = 128;
      byte byteValue = (byte)intValue;

문자열(String)

  • 큰따옴표""로 감싸진 문자열
  • String 타입 변수 선언, 문자열 리터럴 할당
// 문자열 리터럴을 String 타입의 변수 name에 할당하는 방법
String name1 = "Hello World";

// String 클래스의 인스턴스를 생성하는 방법
String name2 = new String("Hello world");
  • 클래스는 일종의 거푸집이며, 그 거푸집을 통해서 찍어낸 것이 인스턴스다. 그리고, 클래스로 인스턴스를 찍어내고자 할 때 new연산자를 사용
  • String 타입의 변수는 String 변수명;으로 선언할 수 있다.
  • 선언한 변수에 문자열을 할당하는 방법은 두 가지가 있다.
    1. 문자열 리터럴을 할당하는 방법 : 변수 = “문자열”;
    2. String 클래스의 인스턴스를 생성하여 할당하는 방법 : 변수 = new String(”문자열”);
  • 동일한 문자열 리터럴을 두 변수에 할당하는 경우, 두 변수는 같은 문자열의 참조값을 공유 → 같은 문자열의 주소값 저장
  • String 클래스의 인스턴스를 생성하게 되면 문자열의 내용이 같을지라도, 별개의 인스턴스가 따로 생성 → 서로 다른 인스턴스의 주소값 저장

연산자 우선순위

우선순위연산자내용
1(),[]괄호 / 대괄호
2!, ~, ++, --부정/ 증감 연산자
3*, /, %곱셈 / 나눗셈 연산자
4<, <=, >, >=대소 비교 연산자
5&&AND 연산자
6
7? :조건 연산자
8=, +=, -=, /=, %=대입/할당 연산자
profile
백엔드 개발자

0개의 댓글