03. 자바의 기초 - 자료형

한강섭·2025년 1월 3일
post-thumbnail

자료형

int	-2147483648 ~ 2147483647
long	-9223372036854775808 ~ 9223372036854775807

int age = 10;
long countOfStar = 8764827384923849L;

float pi = 3.14F;
double morePi = 3.14159265358979323846;

8진수와 16진수는 int 자료형을 사용한다. 숫자 0으로 시작하면 8진수, 숫자 0과 알파벳 x로 시작하면 16진수가 된다. 8진수와 16진수를 사용한 예를 살펴보자. 023과 0xC3에 해당하는 십진수 값은 각각 19, 195이다.

int octal = 023;    // 십진수: 19
int hex = 0xC3;     // 십진수: 195

boolean isSuccess = true;
boolean isTest = false;

char a1 = 'a';  // 문자로 표현
char a2 = 97;  // 아스키코드로 표현
char a3 = '\u0061';  // 유니코드로 표현

String a = new String("Happy Java");
String b = new String("a");
String c = new String("123");

원시 자료형

앞에서 살펴보았던 int, long, double, float, boolean, char 자료형을 원시(primitive) 자료형이라고 한다. 이런 원시 자료형은 new 키워드로 값을 생성할 수 없다.

Wrapper 클래스

int, long, double, float, boolean, char 등의 원시 자료형에는 각각 그에 대응하는 Wrapper 클래스가 있다.

원시 자료형 Wrapper 클래스
int Integer
long Long
double Double
float Float
boolean Boolean
char Character
멀티 스레드 환경에서 동기화를 지원하려면 원시 자료형대신 Wrapper 클래스를 사용해야 한다.

문자열 내장 메서드

equals

System.out.println(a.equals(b)); // false 출력

indexOf

String a = "Hello Java";
System.out.println(a.indexOf("Java"));  // 6 출력

contains

String a = "Hello Java";
System.out.println(a.contains("Java"));  // true 출력

charAt

String a = "Hello Java";
System.out.println(a.charAt(6));  // "J" 출력

replaceAll

String a = "Hello Java";
System.out.println(a.replaceAll("Java", "World"));  // Hello World 출력

toUpperCase

String a = "Hello Java";
System.out.println(a.toUpperCase());  // HELLO JAVA 출력

split

String a = "a:b:c:d";
String[] result = a.split(":");  // result는 {"a", "b", "c", "d"}

문자열 포매팅은 String.format 메서드를 사용한다.

System.out.println(String.format("I eat %d apples.", 3));  // "I eat 3 apples." 출력

int number = 10;
String day = "three";
System.out.println(String.format("I ate %d apples. so I was sick for %s days.", number, day));

StringBuffer 자료형

append

StringBuffer sb = new StringBuffer();  // StringBuffer 객체 sb 생성
sb.append("hello");
sb.append(" ");
sb.append("jump to java");
String result = sb.toString();
System.out.println(result);  // "hello jump to java" 출력

근데 밑에 처럼 문자열로 하면 더 코드도 줄고 편하잖앙

String result = "";
result += "hello";
result += " ";
result += "jump to java";
System.out.println(result);  // "hello jump to java" 출력

BUT 이렇게 하면 내부적으로 +연산이 있을 때마다 String 객체를 새로이 생성하여 리턴한다.
그래서 StringBuffer를 사용하면 StringBuffer 하나의 객체만 생성하지만
+연산을 하면 4개의 객체가 생성됨
장단점이 있음 상황에 맞춰서!

insert
insert 메서드는 특정 위치에 원하는 문자열을 삽입할 수 있다. insert를 사용하여 0번째 위치에 hello라는 문자열을 삽입해 보자.

StringBuffer sb = new StringBuffer();
sb.append("jump to java");
sb.insert(0, "hello ");
System.out.println(sb.toString());

substring
다음과 같이 substring(시작 위치, 끝 위치)와 같이 사용하면 StringBuffer 객체의 시작 위치에서 끝 위치까지의 문자를 뽑아낸다.

StringBuffer sb = new StringBuffer();
sb.append("Hello jump to java");
System.out.println(sb.substring(0, 4));

배열

int[] odds = {1, 3, 5, 7, 9};
String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};
String[] weeks = new String[7];
weeks[0] = "월";
weeks[1] = "화";
String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};
for (int i = 0; i < weeks.length; i++) {
    System.out.println(weeks[i]);
}

리스트

리스트와 배열의 가장 큰 차이점은, 배열은 크기가 정해져 있지만 리스트는 변한다는 데 있다.

ArrayList
리스트 자료형에서 가장 일반적으로 사용하는 ArrayList를 알아보자. 참고로 리스트 자료형에는 ArrayList, Vector, LinkedList 등이 있다.

import java.util.ArrayList;

public class Sample {
    public static void main(String[] args) {
        ArrayList pitches = new ArrayList();
        pitches.add("138");
        pitches.add("129");
        pitches.add("142");
        System.out.println(pitches.get(1)); //129
        System.out.println(pitches.size()); //3
        System.out.println(pitches.contains("142")); //true
        System.out.println(pitches.remove("129")); //true 출력 후 삭제
    }
}

제네릭스

ArrayList<String> pitches = new ArrayList<>();
pitches.add("138");
pitches.add("129");

String one = pitches.get(0);  // 형 변환이 필요없다.
String two = pitches.get(1);  // 형 변환이 필요없다.

맵(Map)

맵은 사전(dictionary)과 비슷하다. 예를 들어 people이란 단어에는 사람, baseball이라는 단어에는 야구라는 뜻이 부합되듯이 맵은 키(key)와 값(value)을 한 쌍으로 갖는 자료형이다.

맵 자료형에는 HashMap, LinkedHashMap, TreeMap 등이 있다.

import java.util.HashMap;

public class Sample {
    public static void main(String[] args) {
        HashMap<String, String> map = new HashMap<>();
        map.put("people", "사람");
        map.put("baseball", "야구");
        System.out.println(map.get("people")); // "사람" 출력
        System.out.println(map.get("java"));  // null 출력
		System.out.println(map.getOrDefault("java", "자바"));  // "자바" 출력
        System.out.println(map.containsKey("people"));  // true 출력
        System.out.println(map.remove("people"));  // "사람" 출력
        System.out.println(map.size());
        System.out.println(map.keySet());  // [baseball, people] 출력
    }
}

집합(Set)

자료형은 집합과 관련된 것을 쉽게 처리하기 위해 만든 것으로 HashSet, TreeSet, LinkedHashSet 등이 있다

import java.util.Arrays;
import java.util.HashSet;

public class Sample {
    public static void main(String[] args) {
        HashSet<Integer> s1 = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5, 6));
        HashSet<Integer> s2 = new HashSet<>(Arrays.asList(4, 5, 6, 7, 8, 9));
        HashSet<Integer> intersection = new HashSet<>(s1);  // s1으로 					intersection 생성
        intersection.retainAll(s2);  // 교집합 수행
        System.out.println(intersection);  // [4, 5, 6] 출력
        union.addAll(s2); // 합집합 수행
        substract.removeAll(s2); // 차집합 수행
    }
}

형 변환

public class Sample {
    public static void main(String[] args) {
        String num = "123";
        int n = Integer.parseInt(num);
        System.out.println(n);  // 123 출력
        
        int n = 123;
        String num = "" + n;
        String num1 = String.valueOf(n);
        String num2 = Integer.toString(n);
        
        String num = "123.456";
        double d = Double.parseDouble(num);
        
        int n1 = 123;
        double d1 = n1;  // 정수를 실수로 바꿀때에는 캐스팅이 필요없다.
        System.out.println(d1);  // 123.0 출력

        double d2 = 123.456;
        int n2 = (int) d2; // 실수를 정수로 바꿀때에는 반드시 정수형으로 캐스팅해 주어야 			한다.
    }
}

final

final은 자료형에 값을 단 한 번만 설정할 수 있게 강제하는 키워드이다. 값을 한 번 설정하면 그 값을 다시 설정할 수 없다.

public class Sample {
    public static void main(String[] args) {
        final int n = 123;  // final로 설정하면 값을 바꿀 수 없다.
        n = 456;  // 컴파일 오류 발생
    }
}

후 내용이 방대하지만 다 배웠던 내용이라 리마인드 제대로 할 수 있어서 넘 좋았당

profile
기록하고 공유하는 개발자

0개의 댓글