본문 바로가기
Back-End/Java

변수(variable)

by 달의 조각 2021. 11. 15.
이 글은 남궁성 님의 Java의 정석 책을 참고하여 정리한 글입니다.

 

  • 지역 변수: 초기화 반드시 필요
    → 메모리는 공유 자원이라서 Garbage Value가 남아 있을 수 있다
  • 클래스 변수, 인스턴스 변수: 초기화 생략 가능
  • 식별자 규칙: 특수 문자 '_'과 '$'만 허용
  • 클래스 이름의 첫 글자는 항상 대문자, 변수와 메서드의 이름의 첫 글자는 항상 소문자

https://www.oracle.com/java/technologies/javase/codeconventions-namingconventions.html

 


 

자료형

 

1. 기본형(primitive type)

  • 자료형 값의 범위: -2n-1 ~ 2n-1-1 (n은 bit 수)
  • int: 대략 10자리 수의 값 저장, 7~9자리 수를 게산할 때는 long 타입(약 19자리)을 선언하는 것이 좋다.
  1 byte 2 byte 4 byte 8 byte
논리형 boolean      
문자형   char    
정수형 byte short int long
실수형     float double

 

2. 참조형(reference type)

  • null 또는 객체의 주소 저장
  • 선언 시 변수 타입을 클래스의 이름으로 사용 = 새로운 클래스를 작성한다는 것은 새로운 참조형을 추가하는 것
Date today = new Date(); // Date 객체를 생성해서, 그 주소를 today에 저장

 

3. 상수

  • 한 번 값을 저장하면 다른 값으로 변경 불가
  • 선언과 동시에 초기화
final int MAX_VALUE = 100; // MAX_VALUE: 상수, 100: 리터럴
  • 16진수: 접두사 '0x' 또는 '0X', 8진수: '0', 2진수: '0b' 또는 '0B'
  • E, e: 소수점이나 10의 제곱을 나타낸다.
  • 문자 리터열은 반드시 하나의 문자가 있어야 한다.
  • 어떤 타입의 변수도 문자열과 덧셈 연산을 수행하면 그 결과가 문자열이 된다.
    → 기본형 타입의 값을 문자열로 변환할 때 빈 문자열("")을 더한다.

 


 

형식화된 출력 - printf()

 

지시자(specifier)

  • Java API에서 Formatter클래스(java.util패키지)를 통해 전체 지시자 목록 확인 가능
%5d //    10 출력 공간 확보(우측 정렬)
%-5d // 10   (좌측 정렬)
%05d // 00010
%.5s // 왼쪽에서 5글자만 출력

%x // fffffff
%#x // 0xfffffff
%#X // 0XFFFFFFF
%b 불리언(boolean) 형식으로 출력
%o 8진(octal) 정수의 형식으로 출력
%x, %X 16진(hexa-decimal) 정수의 형식으로 출력
%f 부동 소수점(floating-point) 형식으로 출력
%전체자리.소수점아래자리f
%f는 소수점 아래 6자리까지만 출력, 7자리에서 반올림
%e, %E 지수(exponent) 표현식의 형식으로 출력
  • 10진수 → 2진수
Integer.toBinaryString(int i)

 

 


 

Scanner 클래스의 객체 생성

nextLine()이라는 메서드를 호출하면 입력 대기에 있다가 입력을 마치고 '엔터'를 누르면 문자열로 반환
nextInt(), nextFloat()와 같이 숫자로 바로 입력받는 메서드는 화면에서 연속적으로 값을 입력받아서 까다롭다.

콘솔창에서 키보드 입력을 대기하는 커서가 활성화, nextLine()의 경우 엔터 이전에 입력한 값 수정 가능

String input = scanner.nextLine(); // 입력받은 내용을 input에 저장
int num = Integer.parseInt(input); // 입력받은 내용을 int타입의 값으로 변환

// float타입: Float.parseFloat()

 


 

특수 문자 문자 리터럴
역슬래쉬(\) \\
작은따옴표 \'
큰따옴표 \"

 

String name1 = "Kim Coding"; //실제 문자열이 아니라 메모리 주소값을 저장한다
String name2 = "Kim Coding"; //toString() 자동 호출

String name3 = new String("Kim Coding");
String name4 = new String("Kim Coding");

boolean comparison1 = name1 == "Kim Coding";      // true, 참조값 비교
boolean comparison2 = name1 == name2;             // true
boolean comparison3 = name1 == name3;             // false
boolean comparison4 = name3 == name4;             // false
boolean comparison5 = name1.equals("Kim Coding"); // true, 내용 비교
boolean comparison6 = name1.equals(name3);        // true
boolean comparison7 = name3.equals(name4);        // true

 


 

String 클래스

 

charAt()
compareTo(), CompareToIgnoreCase() //사전 편찬 순으로 비교
concat() //연결
indexOf() //처음 등장한 인덱스, 포함하지 않았다면 -1
trim()
toLowerCase(), toUpperCase()

https://www.javatpoint.com/understanding-toString()-method

 

Java int to string

String.valueOf()
Integer.toString()
String.format()

 

Java string to int

Integer.parseInt()
Integer.valueOf()

 

Java char to int

Character.getNumericValue()
String.valueOf()

 


 

StringTokenizer

 

int countTokens() //남은 토큰 개수
boolean hasMoreElements()
boolean hasMoreTokens() //현재 위치 뒤에 문자열이 있는가?
Object nextElement()
String nextToken() //다음 토큰
	StringTokenizer tokenizer = new StringTokenizer(str);

	while(tokenizer.hasMoreTokens()){
		System.out.println(tokenizer.nextToken());

 


 

StringBuilder / StringBuffer

 

1. StringBuilder 

String 클래스의 인스턴스는 여러 개의 문자열을 더할 때 매번 새로운 인스턴스를 생성해야 한다
→ + 할 경우 새로운 인스턴스가 생성됨: 비효율적
변수에 문자열 할당 시 toString() 사용

        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("문자열 ").append("연결");
        String str = stringBuilder.toString();
        System.out.println(stringBuilder); //문자열 연결
        System.out.println(str); //문자열 연결

 

2. StringBuffer

String 클래스의 인스턴스와 달리 값을 변경할 수도 있고, 추가할 수도 있다
내부적으로 버퍼라는 공간을 가진다 → 기본값은 16개 공간(+n 가능)

append()
capacity() //현재 버퍼의 크기: 16 + n
delete(3, 8), deleteCharAt(0) //인덱스 3부터 7까지 제거
insert(3, "Hi") //현재 인덱스 3의 문자열은 밀려남

 

https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html

'Back-End > Java' 카테고리의 다른 글

객체지향 프로그래밍 Ⅱ  (0) 2021.12.16
객체지향 프로그래밍 Ⅰ  (0) 2021.12.02
배열(array)  (0) 2021.11.25
연산자(Operator)  (0) 2021.11.16
Java란?  (0) 2021.11.15

댓글