본문 바로가기
  • hello world
Language/Java

[Java] 변수 · 자료형 · 연산자

by JJoajjoa 2023. 8. 10.
프로그래밍에서 가장 기본적인 동작은 데이터를 저장하고, 저장된 데이터값을 읽어오는 것

 

 

변수 variable 

값을 넣을 수 있는 빈 상자

값을 대입해서 사용할 수 있음

메모리 공간에 부여하는 이름

 

변수 명명 규칙

  • 영문 대소 문자와 한글 사용 가능
  • 변수 명은 숫자로 시작할 수 없음
  • _ 와 $ 이외의 특수문자 사용할 수 없음
  • int, class, return 등 자바 예약어 사용할 수 없음
  • 국룰 : 영어 소문자로 시작하기
  • 국룰 : 영단어 2개 이상 결합할 때는 새로운 단어 앞글자 대문자로 하기

 

자료형 data type

변수 값의 어떠한 형태

데이터의 종류와 크기를 결정하는 기본 구성 요소

메모리 공간의 자료형에 따라 저장할 수 있는 값의 종류와 특징이 결정됨

C, 자바 같은 컴파일 언어는 변수를 사용하기 전에 반드시 자료형을 선언해야 함

자료형 변수명;

 

주의할 점

  • 자료형은 반드시 사용하기 전에 선언해야 함
  • 자료형은 반드시 한번만 선언해야 함
    변수에 한 번 지정된 자료형을 바꿀 수 없는 이유 :
    변수의 자료형이 처음 선언되면 메모리에는 선언된 자료형의 데이터만 저장할 수 있는 공간이 만들어지는데,
    메모리에서 한번 만들어진 공간은 사라질 수는 있어도 데이터를 저장하는 기능은 변경할 수 없기 때문
    자바에서는 연필 상자에는 연필만 넣을 수 있고 지우개 상자에는 지우개만 넣을 수 있음

 

변수의 생존 기간

메모리에 변수가 만들어진 이후 사라지기 까지의 기간을 의미

개발자가 직접 변수 생성 → 하지만 메모리에서 변수를 삭제하는 작업은 자바 가상머신이 알아서 함

변수는 선언된 시점에 생성됨

이후 생성된 변수는 자신이 선언된 열린 중괄호의 쌍인 닫힌 중괄호를 만나면 메모리에서 삭제됨

 

 

 

 

멤버 변수
Member Variable
클래스 변수
Class Variable
클래스 내에서 선언 static 키워드로 선언
객체 변수
Instance Variable
객체마다 독립적인 값을 가짐
로컬 변수
Local Variable
로컬 변수 메서드 내에서 선언  

 


자료형의 종류

구 분 저장값 자료형
기본 자료형 참, 거짓 : true, false boolean
정수 : ... -1, 0, 1 ... byte, short, int, long
실수 : -5.4, 1.7 ... float, double
문자(정수) : 'A', 'b' ... char
참조 자료형 객체 : Object 배열, 클래스, 인터페이스

 

자료형을 분류하는 이유

기본 자료형과 참조 자료형의 값 저장 방식이 서로 다르기 때문

기본 자료형 차이점 참조 자료형
소문자로 시작(int, long ...) 자료형의 이름 규칙 대문자로 시작 (String, System ...)
스택 메모리에 생성된 공간에 실제 변숫값 저장 실제 데이터값 저장 위치 실제 데이터값은 힙메모리에 저장하고, 스택메모리의 변수공간에는 실제 변숫값이 저장된 힙 메모리의 위칫값 저장

 

 

숫자

자료형 표현 범위
정수 int -2147483648 ~ 2147483647
long(L) -9223372036854775808 ~ 9223372036854775807
실수 float(F) -3.4*10^38 ~ 3.4*10^38
double -1.7*10^308 ~ 1.7*10^308

8진수와 16진수는 int 자료형을 사용한다.

숫자 0으로 시작하면 8진수, 숫자 0과 알파벳 x로 시작하면 16진수가 된다.

8진수와 16진수를 사용한 예를 살펴보자. 023과 0xC3에 해당하는 십진수 값은 각각 19, 195이다.

 

연산자 연산 기호 기 능 결 과
산술 +, -, *, /, % 사칙연산 및 나머지 연산
증감 ++, -- 값이 1씩 증가 및 감소
비트 &, |, ~, ^ 비트 AND, OR, NOT, XOR
시프트 >>, <<, >>> 비트 단위의 이동
비교 <. >, <=, >=, ==, != 값의 크기 비교 참 또는 거짓
논리 &&, ||, !, ^ 논리 AND, OR, NOT, XOR
대입 =, +=, -=, *=, /=, &=, |=, >>=, <<=, >>>= 산술연산결과의 대입 실행
삼항 (참 또는 거짓) ? x : y 참일 때 X, 거짓일 때 y

우선순위: 산술 -> 비교 -> 논리

 

 

불 불린 불리언 불련 Boolean

true
거짓 false

 

 

 

문자 · 문자열

문자 char ' '
문자열 String " "

 

#문자열 내장 메서드

  • equals 문자열 2개가 같은지 비교하여 결과(T, F) 리턴
  • indexOf 특정 문자열이 시작되는 위치값 리턴
  • contains 문자열에서 특정 문자열이 포함되어 있는지 여부 리턴
  • charAt 문자열에서 특정 위치의 문자 리턴
  • replaceAll 특정 문자열을 다른 문자열로 바꿀 때 사용
  • substring 문자열에서 특정 문자열을 뽑아낼 때 사용
  • toUpperCase 모두 대문자로 변경
  • split특정 구분자로 나눠 문자열을 배열로 리턴

 

# 문자열 포맷 코드

  • %s 문자열
  • %c 문자 한개
  • %d 정수
  • %f 부동소수
  • %o 8진수
  • %x 16진수
  • %% Literal %( 문자 % 자체)
System.out.println(String.format("I have %s apples",  3));  // "I have 3 apples" 출력
System.out.println(String.format("rate is %s", 3.234));  // "rate is 3.234" 출력
System.out.println(String.format("Error is %d%%.", 98));  // "Error is 98%." 출력

 

 

 

 

StringBuffer

문자열을 추가하거나 변경할 때 주로 사용하는 자료형

 

#메서드

  • append
  • insert
  • substring
StringBuffer sb = new StringBuffer();  // StringBuffer 객체 sb 생성
sb.append("hello");
sb.append(" ");
sb.append("jump to java");
String result = sb.toString();
System.out.println(result);  // "hello jump to java" 출력


StringBuffer sb = new StringBuffer();
sb.append("jump to java");
sb.insert(0, "hello ");
System.out.println(sb.toString()); // "hello jump to java" 출력


StringBuffer sb = new StringBuffer();
sb.append("Hello jump to java");
System.out.println(sb.substring(0, 4)); // "Hell" 출력

 

StringBuffer 자료형은 String 자료형보다 무거운 편에 속한다.

new StringBuffer()로 객체를 생성하면 String을 사용할 때보다 메모리 사용량도 많고 속도도 느리다.

따라서 문자열을 추가하거나 변경하는 작업이 많으면 StringBuffer를, 적으면 String을 사용하는 것이 유리하다.

 

 

 

 

배열 array

자료형의 종류가 아니라 자료형의 집합을 의미

배열은 크기를 미리 정해야함

int[] odds = {1, 3, 5, 7, 9};
String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};


String[] weeks = new String[7];
weeks[0] = "월";
weeks[1] = "화";
weeks[2] = "수";
weeks[3] = "목";
weeks[4] = "금";
weeks[5] = "토";
weeks[6] = "일";


String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};
System.out.println(weeks[3]); // 목


String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};
for (int i = 0; i < weeks.length; i++) {
    System.out.println(weeks[i]);
}

 

 

 

리스트

배열과 비슷하지만 편리한 기능이 더 많은 자료형

리스트는 크기가 변할 수 있음

ArrayList, Vector, LinkedList 등이 있음

 

# ArrayList

import java.util.ArrayList;

public class Sample {
    public static void main(String[] args) {
        ArrayList pitches = new ArrayList();
        pitches.add("138");
        pitches.add("129");
        pitches.add("142"); 
        System.out.println(pitches.get(1)); // 129
        System.out.println(pitches.size()); // 3
        System.out.println(pitches.contains("142")); // true
        System.out.println(pitches.remove("129"));  // 129를 리스트에서 삭제하고, true를 리턴
        System.out.println(pitches.remove(0));  // 첫 번째 항목인 138을 삭제한 뒤 138을 리턴
    }
}

 

 

 

대응 관계를 쉽게 표현할 수 있게 해주는 자료형

키(key)와 값(value)을 한 쌍으로 갖는 자료형

HashMap, LinkedHashMap, TreeMap 등이 있음

 

HashMap

import java.util.HashMap;

public class Sample {
    public static void main(String[] args) {
        HashMap<String, String> map = new HashMap<>();
        map.put("people", "사람");
        map.put("baseball", "야구");
        System.out.println(map.get("people")); // "사람" 출력
        System.out.println(map.containsKey("people"));  // true 출력
        System.out.println(map.keySet());  // [baseball, people] 출력
        System.out.println(map.remove("people"));  // "사람" 출력
        System.out.println(map.size()); // 1 
    }
}

 

 

 

집합

집합과 관련된 것을 쉽게 처리하기 위해 만든 것

  • 중복을 허용하지 않는다.
  • 순서가 없다(unordered).

 

 

 

 

 

상수집합

enum 자료형은 서로 연관 있는 여러 개의 상수 집합을 정의할 때 사용

 

 

 

 

 

형변환 / final

형변환 : 자료형을 다른 자료형으로 바꾸는 것

final : 자료형에 값을 단 한번만 설정할 수 있게 강제하는 키워드

          값을 한 번 설정하면 그 값을 다시 설정할 수 없음