2 변수와 자료형

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

'자바' 카테고리의 다른 글

6 클래스와 객체  (0) 2023.02.02
5 반복문  (0) 2023.02.02
4 조건문  (0) 2023.02.02
3 여러가지 연산자  (0) 2023.02.02
1. 자바의 개요  (0) 2020.05.24