[공부 내용 정리]
변수
변수의 선언과 저장
int age = 20;
double pi = 3.14
- 변수의 이름을 지정할 때 예약어를 피해서 지정해야함.
변수 값 읽기
- 변수는 초기화되어야 읽을 수 있음.
변수의 사용 범위
- 중괄호 {} 블록 내에서 선언되고 사용됨.
<메소드 블록 안에 있는 변수는 선언된 블록 내에서만 가능>
- 로컬 변수 : 메소드 블록 내에서 선언된 변수
클래스 or 변수 네이밍 규칙
- 숫자x, 예약어x, 대소문자 구분, 길이제한x
변수 네이밍 컨벤션
- 클래스명 첫 글자는 항상 대문자
- 여러 단어가 합쳐진 변수명은 단어의 시작은 대문자
- ex) saveMembers, lastIndexOf
- 상수의 이름은 대문자가 권장사항
- MIN_NUMBER, LAST_NAME
변수의 타입
- 기본 타입 (원시 : primitive type)
- 정수 타입 (byte, char, short, int, long)
- byte (1byte) < char (2byte) < short (2byte) < int (4byte) < long (8byte)
- 실수 타입 (float, double)
- float (4byte) < double (8byte)
- 자바는 실수 연산 기본 타입으로 double을 사용함. float 사용시 값 뒤에 f 또는 F 붙여야 함.
- 논리 타입 (boolean)
- 논리값 (true/false) 저장
타입 변환
- 데이터 타입을 다른 데이터 타입으로 변환하는 것
1) 자동 (묵시적) 타입 변환
- 작은 크기의 타입은 큰 크기의 타입으로 자동 타입 변환 가능
int intValue = 500;
long longValue = intValue // 타입 변환 (int -> long)
2) 강제적 (명시적) 타입 변환
- 반대로 큰 크기의 타입은 작은 크기의 타입으로 자동 타입 변환 할 수 없음.
- 하지만 캐스팅(쪼개서)하여 강제로 타입을 변환시킬 수 있음.
double doubleValue = 3.14;
int intValue = (int) doubleValue; // intValue는 정수 부분인 3만 저장
3) 연산식에서의 자동 타입 변환
- 연산은 기본적으로 같은 타입끼리 수행되기 때문에 서로 다른 타입일 경우 크기가 큰 타입으로 자동변환된 후 연산을 수행함.
- 예를 들어 int + double 덧셈 연산 시 int→double 으로 자동 변환되고 연산 수행.
- 만약 int 타입으로 연산을 해야한다면 double 타입을 int 타입으로 강제 변환.
기본 자료형과 참조 자료형
- 문자열 선언할 때는 리터럴 표기 방식을 따르는 것이 좋음
- String a = "123"; String b = "Hello World";
equals
- 문자열을 비교할 때 == 대신 equals을 사용해야함
-> str과 str2는 값은 같지만 서로 다른 객체이다. == 은 2개의 자료형이 같은 객체인지(= 같은 주소값을 갖는지)를 판별할 때 사용하는 연산자이르모 false를 리턴한다.
indexOf
- 문자열에서 특정 문자열이 시작되는 위치(인덱스값)을 리턴함.
String a = "Hello World!";
System.out.println(a.indexOf("!"));
11
- 공백도 센다.
- 만약 찾는 값이 없다면 -1을 리턴한다.
- +) 배열의 경우에는 인덱스를 벗어났다는 에러가 뜬다.
contains
- contains 메서드는 문자열에서 특정 문자열이 포함되어있는지 여부를 리턴함.
String a = "Hello World!";
System.out.println(a.contains("World"));
→ 포함되어있으면 true 출력
charAt
- 문자열에서 특정 위치의 문자를 리턴.
String findChar = "What is your hobby";
System.out.println(findChar.charAt(5));
i
replaceAll
- 문자열에서 특정 문자열을 다른 문자열로 바꿀 때 사용함.
String a = "Hello World!";
System.out.println(a.replaceAll("World", "Spring"));
Hello Spring!
+) 정규 표현식도 가능
subString
- 문자열에서 특정 문자열을 뽑아낼 때 사용함.
String a = "Hello World!";
System.out.println(a.substring(3, 5));
lo
- 시작위치 ≤ a < 끝위치 (지정한 끝위치는 포함안됨!)
toUpperCase
- 문자열을 모두 대문자로 변경할 때 사용함.
- 반대로 toLowerCase는 모두 소문자로 변경함.
spilt
- 문자열을 특정한 구분자로 나누어 문자열 배열로 반환
String a = "a:b:c:d";
String[] result = a.split(":"); // result는 {"a", "b", "c", "d"}
- 여기서 바로 result를 출력하면 주소값이 나옴. 따라서 for문을 사용하거나 메서드를 사용해야함
concat
- 문자열을 합치는 역할을 하고, 결과값은 문자열로 반환함.
String result = "Hello";
System.out.println(result.concat("!")); // 결과 : Hello!
문자열 포맷팅 메서드 - format
String.format("... **%s**.. **%s**..", 치환값1, 치환값2);
→ 첫 번째 s의 경우 치환값1, 두 번째 s의 경우 치환값2
String name1 = "Tim";
int age1 = 30;
String name2 = "Anna";
int age2 = 45;
String.format("%s의 나이는 %s세 입니다", name1, age1);
String.format("%s의 나이는 %s세 입니다", name2, age2);
혹은 직접 인자값을 넣어줌으로써 치환도 가능함!
String.format("%s의 나이는 %s세 입니다", "Tim", 30);
String.format("%s의 나이는 %s세 입니다", "Anna", 45);
+) 현업에서는 System.*out*.println(); 대신 LogBack 이라는 라이브러리로 로그를 관리함. (sout은 원하지 않는 로그가 출력되기 때문)
StringBuffer/StringBuilder
- 문자열을 추가하거나 변경할 때(연산) 주로 사용하는 자료형.
public class StringBuilderBufferExample {
public static void main(String[] args) {
StringBuilder builder = new StringBuilder();
builder.append("Hello ");
builder.append("Java ");
builder.append("World!");
System.out.println(builder);
StringBuffer buffer = new StringBuffer();
buffer.append("Hello ");
buffer.append("Java ");
buffer.append("World!");
System.out.println(buffer);
}
}
오토박 & 언박싱, 문자열과 숫자형 변환
- 기본형(Primitive) 타입과 이것의 Wrapper 타입(클래스)
- Wrapper은 기본 자료형을 감싸 객체 형태로 만든 것
오토박싱
- 기본 타입의 데이터를 Wrapper 클래스의 객체로 변환하는 것
int index = 11;
Integer number = Integer.valueOf(index); // 박싱
int index = 11;
Integer number = index; // 오토박싱
- 오토박싱은 제네릭 컬렉션에 값을 추가하는 경우 유용함.
public class AutoBoxingExample {
public static void main(String args[]) {
ArrayList<Integer> arrayList = new ArrayList<>();
/* 오토 박싱 */
arrayList.add(10);
arrayList.add(20);
arrayList.add(30);
System.out.println("ArrayList: " + arrayList);
}
}
- 오토박싱으로 기본타입의 값은 Wrapper클래스의 객체로 변환되어 Integer 타입의 ArrayList에 할당됨.
- 그리고 null 값을 허용함
언박싱
- 래퍼 클래스를 기본형 타입으로 변환하는 것
int index = 20;
Integer intObject = index; // 오토박싱
int index = intObject; // 언박싱
+) 오토박싱이 수행되면 연산 시간이 더 늘어나게 됨. 따라서 오토박싱과 언박싱이 이루어지지 않도록 동일한 타입연산이 이루어지도록 구현해야함.
문자열과 숫자 형변환
String → int/Integer
String str = "12345";
int intValue = Integer.parseInt(str);
Integer integerValue = Integer.valueOf(str);
System.out.println(intValue);
System.out.println(integerValue);
→ 이렇게 str에 숫자로 입력된 문자열 값이 들어가면 잘 실행됨. 하지만 str에 숫자가 아닌 문자열이 입력되고 숫자 타입으로 파싱하려 NumberFormatException 에러 발생.
String → Long
- Long.parseLong()
String str = "10000000000"; // 100억 숫자값으로 입력
long strTolong = Long.parseLong(str);
Long strToLong = Long.valueOf(str); // Wrapper class로 변환
System.out.println(strToLong);
<실행 결과>
10000000000
String → Float/Double
- Float.parseFloat()
- Double.parseDouble()
String str = "1000000.985";
Double strToDouble = Double.parseDouble(str);
Float strToFloat = Float.parseFloat(str);
System.out.println(strToFloat);
System.out.println(strToDouble);
<실행 결과>
1000001.0
1000000.985
'Back-End > Java # 교육' 카테고리의 다른 글
[Java 교육] final/상수/Getter,Setter/상속 (0) | 2024.02.01 |
---|---|
[Java 교육] 메소드 (0) | 2024.01.31 |
[Java 교육] 반복문/참조 자료형/클래스 (0) | 2024.01.30 |
[Java 교육] 연산/조건문/배열 (1) | 2024.01.29 |
[Java 교육] Java 기초/코딩 컨벤션 (1) | 2024.01.25 |