목차
1. 변수의 선언과 저장
설명 보기
- 변수 : 데이터를 저장할 때 사용하는 공간
- 하나의 값만 저장할 수 있다.
- 배열 자료형의 경우에만 복수의 값을 저장 가능
- 선언과 저장
- 선언 : 저장할 데이터타입과 변수 이름을 결정하는 것
- (자료형 타입) (변수명);
- 변수명에 예약어(언어에서 이미 문법적인 용도로 사용되는 단어)를 사용해선 안된다.
분류 예약어 기본 데이터 타입 boolean, byte, char, short, int, long, float, double 접근 지정자 private, protected, public 클래스와 관련된 것 class, abstract, interface, extends, implements, enum 객체와 관련된 것 new, instanceof, this, super, null 메소드와 관련된 것 void, return 제어문과 관련된 것 if, else, switch, case, default, for, do, while, break, continue 논리값 true, false 에외 처리와 관련된 것 try, catch, finally, throw, throws 기타 transient, volatile, package, import, synchronized, native, final, static, strictfp, assert
- 선언 : 저장할 데이터타입과 변수 이름을 결정하는 것
- 저장 : 선언된 변수에 값을 할당하는 것
- (변수명) = (값);
- 선언과 저장을 한번에 할 수 있다
- (자료형 타입) (변수명) = (값);
- 변수 값 읽기
- 초기화
- 변수는 초기화 되어야 읽을 수 있고, 초기화 되지 않은 변수는 읽을 수 없다.
- 초기화
- 변수의 사용 범위
- 변수는 중괄호 블록 내에서 선언되고 사용된다.
- 로컬 변수 : 메소드 블록 내에서 선언된 변수
- 메소드 실행이 끝나면 메모리에서 자동으로 사라진다.
- 변수 : 데이터를 저장할 때 사용하는 공간
- 클래스 or 변수 네이밍 규칙
- 숫자로 시작 X
- 예약어를 사용 X
- 대소문자가 구분되며 길이에는 제한 X
- BUT, 길이가 너무 길어진다면 가독성이 떨어진다
- 특수문자는 언더바(_)와 달러($)만 가능하다
- 권장사항
- 클래스나 변수명은 영문으로 작성
- 클래스명의 첫 글자는 항상 대문자
- 여러 단어가 합쳐진 변수명이라면 단어의 시작을 대문자로
- 상수의 이름은 대문자, 단어 사이의 구분자는 언더바(_)
2. 변수의 타입
설명 보기
- 타입 종류
- 기본 타입 (Primitive type)
값의 종류 기본 타입 메모리 사용 크기 저장되는 값의 범위 정수 byte 1byte -128 ~ 127 정수 / 문자 char 2byte 0 ~ 65535 정수 short 2byte -32,768 ~ 32,767 정수 int 4byte -2,147,483,648 ~ 2,147,483,647 정수 long 8byte –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 실수 float 4byte 3.4E+/-38(7개의 자릿수) 실수 double 8byte 1.7E+/-308(15개의 자릿수) 논리형 boolean 1byte true, false
- 정수 타입
- 각각 저장할 수 있는 값의 범위가 다르다
- byte (1byte) < char (2byte) < short (2byte) < int (4byte) < long (8byte)
- 정수 기본타입 : int
- 저장할 수 있는 범위를 초과해서 값이 저장될 경우, trash 값이 저장된다.
- char 타입 : 작은 따옴표 (’) 를 사용해 하나의 문자를 저장한다
- char 타입 변수에 빈 문자열을 대입하면 컴파일 에러 발생
public class CharVariableExample { public static void main(String[] args) { char c1 = 'A'; // 문자를 직접 저장 char c2 = 65; // 10진수로 저장 char c3 = '\u0041'; // 16진수로 저장 char c4 = '가'; // 문자를 직접 저장 char c5 = 44032; // 10진수로 저장 char c6 = '\uac00'; // 16진수로 저장 int unicode = c1; // 유니코드 얻기 System.out.println(c1); System.out.println(c2); System.out.println(c3); System.out.println(c4); System.out.println(c5); System.out.println(c6); System.out.println(unicode); } } char c = ''; // 컴파일 에러 -> char c = ' '; 로 바꿔줘야 함
- String 변수는 빈 문자를 대입해 선언해도 된다.
- char 타입 변수에 빈 문자열을 대입하면 컴파일 에러 발생
- Long 타입 : 4byte인 int 타입보다 저장할 수 있는 범위가 큰 8byte 정수형 타입
- 초기화 할때, l이나 L을 붙여서 8byte 정수형 데이터임을 컴파일러에게 알려준다.
- 실수 타입
- float (4byte) < double (8byte)
- 메모리 사용 크기는 int, long 과 같지만, 저장방식이 달라서 훨씬 더 큰 범위의 값을 저장할 수 있다.
- double : 실수 연산을 하기위한 기본 타입
- float : 값 뒤에 f 나 F를 붙여야 한다.
- double과 float는 정밀도에서 차이가 있다.
- float는 7자리
- double 15~16자리 까지 오차없이 표현가능
- 논리 타입
- 1byte(8bit)로 표현되는 논리값(true/false)를 저장할 수 있는 데이터 타입
- 상태값에 따라 조건문과 제어문의 실행 흐름을 변경하는데 주로 사용
- 기본 타입 (Primitive type)
- 타입 종류
3. 타입 변환
설명 보기
- 데이터 타입을 다른 데이터 타입으로 변환하는 것
- 방법
- 묵시적 타입변환 (자동) : 작은 크기의 타입을 큰 크기의 타입으로 변환하는 것
- 작은 크기의 타입이 저장된 변수를 큰 크기의 타입 변수에 넣으면 된다.
- 명시적 타입변환 (강제적) : 큰 크기의 타입을 작은 크기의 타입으로 변환하는 경우
- 캐스팅 : 큰 크기의 타입을 나눠서 작은 크기에 넣는 것
- 큰 크기의 타입이 저장된 변수를 작은 크기의 타입 변수에 넣을 때, 큰 단위의 변수 앞에 (작은 단위의 변수타입)을 적어준다.
- 사용자로부터 입력받은 값을 변환할 때, 값의 손실이 일어나선 안된다.
- 연산식에서의 자동 타입 변환
- 연산식은 기본적으로 같은 타입끼리 수행된다
- 서로 다른 타입일 경우, 크기가 큰 타입으로 자동변환된 후 연산을 수행한다
4. 기본 자료형과 참조 자료형
설명 보기
- 기본 자료형 (Primitive Data Type) :
- 참조 자료형 (Reference Data Type) :
- 차이점
- 저장 형태
- 기본 타입 변수 : 실제 값을 변수안에 저장
- 참조 변수 : 메모리의 주소를 값으로 갖는다
- 초기화
- 기본 타입 변수 :
int age = 10;
- 참조 변수 : new를 사용해서 초기화해야 한다.
- 단 String은 기본타입처럼 바로 초기화해도 된다.
Calculator calculator = new Calculator(); String name1 = "sung yeon"; String name2 = new String("sung yeon");
- 저장 형태
5. 오토박싱 & 언박싱, 문자열과 숫자형 변환
설명 보기
- Wrapper 타입(클래스) : 기본 자료형을 참조 자료형처럼 사용하기 위한 클래스
- 기본 자료형을 감싸 객체 형태로 만든 것
- Boxing : 기본형에서 Wrapper 타입으로 변환되는 것
- Unboxing : Wrapper 타입에서 기본형으로 변환되는 것
- 오토박싱
- 기본타입의 데이터를 Wrapper 클래스의 객체로 변환하는 것
int index = 11; Integer number = new Integer.valueOf(index); // 박싱(Boxing)
int index = 11; Integer number = index; // 오토박싱 int index = intObject; // 언박싱 Integer => int
- 제네릭(ArrayList<>) 컬렉션에 값을 추가하는 경우에 사용 ()
- 언박싱
- 레퍼 클래스를 기본형 타입으로 변환하는 것
- 오토박싱과 의 성능 차이
- 편의성을 위해 오토박싱과 언박싱이 제공되지만, 내부적으로 추가 연산 작업을 거치게 된다.
- 오토박싱과 언박싱이 일어나지 않도록 동일한 타입 연산이 이루어지도록 구현해야 한다.
public class AutoBoxingPerformanceExample { //오토박싱 연산 public static void main(String[] args) { long startTimeMs = System.currentTimeMillis(); Long sum = 0L; for (int i = 0; i < 1000000000; i++) { sum = sum + 1; } System.out.println("실행 시간: " + (System.currentTimeMillis() - startTimeMs) + "ms"); test(); } //형변환 연산 public static void test() { long startTimeMs = System.currentTimeMillis(); long sum = 0L; for (int i = 0; i < 1000000000; i++) { sum = sum + 1; } System.out.println("실행 시간: " + (System.currentTimeMillis() - startTimeMs) + "ms"); } }
- 문자열과 숫자 변환
- Primitive type으로의 변환
parsewrapper클래스이름()
메소드를 사용하여 변환
- Wrapper class로의 변환
- valueOf() 메소드를 사용하여 변환
- Primitive type으로의 변환
String → int/Integer
Integer.parseInt()
: 문자열을 int 타입으로 변경- 문자열 내용이 정수가 아니라면 Exception 발생
Integer.valueOf()
: 문자열로 Integer 객체 생성
String str = "12345"; int intValue = Integer.parseInt(str); Integer integerValue = Integer.valueOf(str); System.out.println(intValue); System.out.println(integerValue);
int → String
- Integer.toString()
- String.valueOf()
- 변수 + “” (Casting 방식)
int intValue = 10; String StrValue; StrValue = String.valueOf(intValue); StrValue = Integer.toString(intValue); StrValue = "" + intValue; // 정수값에 빈 문자열을 더해 문자열 합치기 연산으로 작동되게 한다
(참고) valueOf()와 toString()은 null 처리 방식에서 차이가 있습니다.
Object nullValue = null; String str; str = nullValue.toString(); // NullPointerException 발생 str = String.valueOf(nullValue); // 문자열 "null"로 변환됨
int 외에 숫자형 타입인 double, float, long 모두 toString() 메소드를 이용하여 문자열로 변환합니다.
- Wrapper 타입(클래스) : 기본 자료형을 참조 자료형처럼 사용하기 위한 클래스
6. 추가할 것
- 리터럴 :
- String constant pool :
- 제네릭 컬렉션 :
- 제네릭 : 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일시에 미리 지정하는 방법
- 장점
- 클래스나 메소드 냅주에서 사용되는 객체의 타입 안정성을 높일 수 있다.
- 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있다.
- 제네릭 : 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일시에 미리 지정하는 방법
- type 변수에 int값인 10을 넣어도 되는 이유? : https://docs.oracle.com/javase/specs/jls/se21/html/jls-5.html#jls-5.1.3
- String 메서드
- indexOf(value) : value 값이 배열에 없다면, -1을 반환한다.
- charAt(index) : index값을 인덱스로 가지는 위치의 데이터를 반환
- substring(beginIndex, endIndex) : 시작 인덱스부터 종료인덱스-1 까지의 string을 반환
- toUpperCase() : 전체 문자를 대문자로 변경
- split(’ ‘) : 띄어쓰기를 기준으로 문자열을 나눠서 문자열 배열(String[])로 반환
- concat() : 문자열 여러개를 합쳐서 반환
- format(”%s sdfsdf %s”, value1, value2 : 원하는 형식으로 String데이터를 만들 수 있다.
- StringBuffer, StringBuilder : 문자열을 추가하거나 변경할 때 주로 사용하는 자료형
- String은 새로운 객체를 생성하고 String 공간을 할당하기 때문에 비효율적
- 따라서 문자열 연산이 필요할땐 StringBuffer 혹은 StringBuilder을 사용
7. Daily Quiz
'Dev > ESTsoft 오르미' 카테고리의 다른 글
참조자료형 (0) | 2024.02.22 |
---|---|
연산자 / 조건문과 반복문 (0) | 2024.02.22 |
Java 기초 (0) | 2024.02.22 |
강사님 코드리뷰 (0) | 2024.02.22 |
공부한 기술들 (0) | 2024.02.22 |