2023. 2. 2. 15:22ㆍ자바
> 변수란?
: 데이터를 저장하는 메모리 공간에 붙여준 이름
> 변수 선언 규칙
- 문자/숫자, _, $ 사용 가능 ex) int kim$123
- 숫자로 시작X
- 대소문자 구분됨 ex) int kim vs int Kim
- 공백사용X
- 미리 예약된 이름 사용X ex) int if = 3;
> 표기법?
- 카멜 표기법: 맨앞은 소문자, 나머지 단어틑 첫 문자를 대문자로
ex) String myName
- 파스칼 표기법: 각 단어의 첫 문자를 대문자로
ex) String MyName
> 자료형(data type)
: 변수의 종류, 단위로 숫자, 부울, 문자, 문자열 등이 있음
1. 자료형_숫자(number)
- 정수: int(4byte), long(8byte)
- 실수: float(4byte), double(8byte)
- 2진수, 8진수, 16진수: 0b, 0, 0x
2. 자료형_부울 : 참과 거짓을 나타내는 자료형
- boolean 변수명 = true 또는 false;
3. 자료형_문자 : 한 개의 문자 표현에 사용하는 자료형
- char 변수명 = 'a';
public class VariableDataType {
public static void main(String[] args) {
// 변수 (int, long, float, double)
int age = 19;
String country = "한국";
System.out.println(age);
System.out.println(country);
int num2 = 0b1100; // 2진수 12
int num8 = 014 ; // 8진수 12
int num16 = 0xC; // 16진수 12
System.out.println(num2);
System.out.println(num8);
System.out.println(num16);
boolean isTrue = true;
char keyA = 'a';
System.out.println(keyA); // a
System.out.println((int)keyA); // ASCII 코드값
}
}
4. 자료형_문자열 : 문자들로 이루어진 집합
- String 변수명 = "abcdefg";
1) 문자열 메소드
→ equals: 두 문자열이 같은지
→ indexOf: 문자가 문자열 내 몇 번째에 있는지
→ replace: 문자열을 다른 문자열로 대체하여 반환
→ substring: 몇번째에서부터 몇번째까지 문자열 반환
→ toUpperCase: 어떤 문자열을 모두 대문자로 반환
public class VariableDataType {
public static void main(String[] args) {
// String method
/* Hi라는 문자열이 이미 메모리에 존재하면 다른 변수들도 같은 메모리에 가리키게 됨 */
/* 즉 str1과 str2는 같은 메모리를 가리키는 것 */
String str1 = "Hello";
String str2 = "Hello";
System.out.println(str1.equals(str2)); // true
System.out.println(str1 == str2); // true
/* str3은 객체로 선언했기 때문에 새로운 메모리에 Hi가 존재하여 그곳을 가리키게 됨 */
String str3 = new String("Hello");
System.out.println(str1.equals(str3)); // true
System.out.println(str1 == str3); // false
/* 그래서 ==연산자는 객체를 비교함으로써 str1과 str3가 가리키는 곳이 다르기 때문에 false */
System.out.println(str1.indexOf("o")); // 4
String str4 = str1.replace("Hello","Hi Bye");
System.out.println(str4); // Hi Bye
System.out.println(str4.substring(0,4)); // Hi B
}
}
★ 중요!
: 어떤 문자열을 변수를 통해 메모리에 선언했다면, 똑같은 문자열을 다른 변수에 값을 지정할 경우 이미 메모리에 존재하는 그 문자열을 가리키도록 하여 메모리 낭비를 줄이게 한다. 이때, 둘 중 한 변수가 다른 문자열로 값을 변경하면 그 문자열은 다시 메모리에 새로 할당되어 이 변수는 그곳을 가리키게 된다.
그래서 변수가 값을 변경하여도 그대로 같은 곳을 가리킬 수 있게 하는 것이 바로 new String()으로 객체를 생성하는 것. 그래서 일반 String으로 값을 바로 지정해준 변수와 String객체로 지정해준 변수를 비교할 때, 객체를 비교하는 ==연산을 사용하게 되면 false로 결과가 출력된다.
5. 자료형_StringBuffer: 문자열을 자주 추가/변경할 때 사용하는 자료형
- StringBuffer 변수명 = new StringBuffer();
1) 메소드
→ append: 문자열에 문자열을 이어 붙이기
→ insert
→ substring: 몇번째에서부터 몇번째까지의 문자열 반환
public class VariableDataType {
public static void main(String[] args) {
/* string은 값이 변경될 때 새롭게 객체를 만드는데 stringbuffer은 있는 객체의 값을 변경하는 것 */
/* 즉 값이 빈번하게 수정되는거면 더 메모리차원에서 절약 가능 */
StringBuffer strBuf = new StringBuffer();
strBuf.append("01234");
System.out.println(strBuf); // 01234
strBuf.append("56789");
System.out.println(strBuf); // 0123456789
}
}
6. 자료형_배열(array)
: 많은 수의 데이터를 담을 수 있는 자료형
- int[] 변수명 = {1,2,3,4,5};
char[] 변수명 = {'a', 'b', 'c');
- String[] 변수명 = new String[개수]; // 미리 배열의 개수를 지정 후, 나중에 값 할당
변수명[0] = "Hi";
public class VariableDataType {
public static void main(String[] args) {
// 배열
int[] intArr = {1, 2, 3, 4, 5};
System.out.println(intArr[0]); // 1
System.out.println(intArr[1]); // 2
System.out.println(intArr[2]); // 3
String[] strArr = new String[3];
strArr[0] = "Hi";
System.out.println(strArr); // 메모리 주소값 나옴
System.out.println(strArr[0]); // Hi
System.out.println(strArr[1]); // null
}
}
7. 자료형_리스트
: 배열과 같이 여러 데이터를 담을 수 있고 여러가지 메서드를 제공하는 자료형
- ArrayList 변수명 = new ArrayList();
◆ 리스트는 배열과 다르게 자료형 구분없이 값을 추가 할 수 있다.
1) 메소드
→ add: 리스트에 값 추가
→ get: 인덱스의 값을 반환
→ size: 리스트의 크기 반환
→ remove: 인덱스의 값을 제거하고 값 반환
→ clear: 리스트 초기화
→ sort: 리스트 정렬
→ contains: 어떤 값이 리스트에 포함되는지 반환
import java.util.ArrayList;
import java.util.Comparator;
public class VariableDataType {
public static void main(String[] args) {
// 리스트
ArrayList l1 = new ArrayList();
l1.add(1);
l1.add("hi");
l1.add(3.14);
System.out.println(l1); // [1, hi, 3.14]
System.out.println(l1.get(0)); // 1
System.out.println(l1.get(2)); // 3.14
System.out.println(l1.size()); // 3
System.out.println(l1.remove(2)); // 3.14
System.out.println(l1.remove(Integer.valueOf(1))); // true
ArrayList l2 = new ArrayList();
l2.add(5);
l2.add(3);
l2.add(8);
l2.add(6);
l2.add(134);
l2.add(-4);
l2.sort(Comparator.naturalOrder());
System.out.println(l2); // [-4, 3, 5, 6, 8, 134]
l2.sort(Comparator.reverseOrder());
System.out.println(l2); // [134, 8, 6, 5, 3, -4]
System.out.println(l2.contains(90)); // false
System.out.println(l2.contains(-4)); // true
}
}
8. 자료형_맵(map)
: key, value 형태로 데이터를 저장하는 자료형
- HashMap<> 변수명 = new HashMap<>();
1) 메소드
→ put: {키: 값} 추가
→ get: 키의 값 반환
→ size
→ remove: 키에 대한 값이 있을 때 제거하고 반환, 아니면 null 반환
→ containsKey
import java.util.HashMap;
public class VariableDataType {
public static void main(String[] args) {
// Map
HashMap map = new HashMap();
map.put("kiwi", 9000);
map.put("banana", 2000);
map.put("orange", 4500);
map.put("apple", 1200);
map.put("peach", 11000);
map.put("grape", 16000);
System.out.println(map); // {banana=2000, orange=4500, apple=1200, kiwi=9000, peach=11000, grape=16000}
System.out.println(map.get("kiwi")); // 9000
System.out.println(map.size()); // 6
System.out.println(map.remove("kiwi")); // 9000
System.out.println(map.remove("hi")); // 키를 가지고 있지 않을 때, null
System.out.println(map.containsKey("apple")); // true
System.out.println(map.containsKey("hi")); // false
}
}
9. 자료형_제네릭(Generic)
: 자료형을 명시적으로 지정하고 제한적일 수 있지만 안정성을 높여주고 형변환을 줄여주는 자료형
list나 map의 자료형 형태를 제한하는 것
- ArrayList<String> 변수명 = new ArrayList<String>();
- HashMap<String, Integer> 변수명 = new HashMap<string, integer>();
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
public class VariableDataType {
public static void main(String[] args) {
// Generics: list나 map의 자료형 형태를 제한하는 것
ArrayList list1 = new ArrayList();
list1.add(1);
list1.add("hello");
System.out.println(list1); // [1, hello]
ArrayList<String> list2 = new ArrayList<String>();
list2.add("hello");
System.out.println(list2); // [hello]
HashMap map1 = new HashMap();
map1.put(123, "id");
map1.put("123", 123);
System.out.println(map1); // {123=123, 123=id}
HashMap<String, Integer> map2 = new HashMap<>();
map2.put("123", 123);
map2.put("234", 234);
System.out.println(map2); // {123=123, 234=234}
}
}
※ 추가 - 다차원 배열
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
public class VariableDataType {
public static void main(String[] args) {
// 다차원 배열
int[][] myArr = {{1,2,3}, {4,5,6}};
for(int i=0; i<myArr.length; i++) {
for(int j=0; j<myArr[i].length; j++) {
System.out.print(myArr[i][j]);
}
System.out.println();
}
for(int[] ints: myArr) {
for(int anInt: ints) {
System.out.print(anInt);
}
System.out.println();
}
// 예제
int[][] testArr = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}};
for(int i=0; i<testArr.length; i++) {
for(int j=0; j<testArr[i].length; j++) {
testArr[i][j] = 1;
if(i == j) {
testArr[i][j] = 10;
}
System.out.print(testArr[i][j] + " ");
}
System.out.println();
}
}
}
▶ 맨 위 결과값
123
456
123
456
▶ 예제 결과값
10 1 1
1 10 1
1 1 10