1. 형변환
public class Sample {
public static void main(String[] args) {
// 문자열 > 정수
System.out.println("문자열 > 정수");
String num = "123";
int n = Integer.parseInt(num);
System.out.println(n); // 123
String number = "123.456";
double nn = Double.parseDouble(number);
System.out.println(nn); // 123.456
String number2 = "123.456";
float nn2 = Float.parseFloat(number2);
System.out.println(nn2); // 123.456
// 실수 형태의 문자열 > 정수
System.out.println("실수 형태의 문자열 > 정수");
String number3 = "123.456";
double dd3 = Double.parseDouble(number3);
int nn3 = (int) dd3;
System.out.println(dd3);
System.out.println(nn3);
// 정수 > 문자열
System.out.println("정수 > 문자열");
int n2 = 123;
String num2 = "" + n2;
System.out.println(num2); // 123
int n3 = 123;
String num3 = String.valueOf(n3);
String num4 = Integer.toString(n3);
}
}
final
자료형에 값을 단 한번만 설정할수 있게 강제하는 키워드
리스트에 final을 적용해도 더하거나 빼는것은 가능. 재할당만 불가능하다. / List.of 를 사용하면 수정도 불가능하다.
2. 숫자(Number) 3. 불리언(boolean) 4. 문자(char)
5. 문자열(String)
5-1. 원시(primitive) 자료형
- int, long, double, float, boolean, char 자료형을 원시(primitive) 자료형 이라고 부른다.
- 원시자료형은 new 키워드로 그 값을 생성할 수 없다.
- 원시자료형은 리터럴(literal)로만 값을 세팅할 수 있다.
- 리터럴 표기는 객체 생성없이 고정된 값을 그대로 대입하는 방법을 말한다.
- String은 원시자료형이 아니지만 리터럴로 세팅할 수 있다.
5-2. 원시자료형의 Wrapper 클래스
ArrayList, HashMap, HashSet 등은 데이터를 생성할때 원시 자료형 대신 그에 대응하는 Wrapper 클래스를 사용해야 한다.
원시 자료형 대신 Wrapper 클래스를 사용하면 값 대신 객체를 주고 받을 수 있어 코드를 객체 중심적으로 작성하는데 유리하다.
5-3. 문자열 내장 메소드
- equals : 두개의 문자열이 동일한지를 비교하여 결과값을 리턴한다. (불리언 데이터로 리턴)
- indexOf : 문자열에서 특정 문자열이 시작되는 위치(인덱스)를 리턴한다.
- contains : 문자열에서 특정 문자열이 포함되어 있는지의 여부를 리턴한다.
- charAt : 문자열에서 특정 위치의 문자(char)를 리턴한다.
- replaceAll : 문자열 중 특정 문자열을 다른 문자열로 바꾸고자 할 때 사용한다.
- substring : 문자열 중 특정 부분을 뽑아낼 경우에 사용한다.
- toUpperCase : 문자열을 모두 대문자로 변경
- toLowerCase : 문자열을 모두 소문자로 변경
- split : 문자열을 특정 구분자로 나누어 문자열 배열로 리턴한다.
public class Sample {
public static void main(String[] args) {
// equals
String a = "hello";
String b = "java";
String c = "hello";
System.out.println(a.equals(b)); // false 출력
System.out.println(a.equals(c)); // true 출력
// contains
String d = "Hello Java";
System.out.println(d.contains("Java")); // true 출력
// charAt
String e = "Hello Java";
System.out.println(e.charAt(6)); // "J" 출력, 인덱스는 0부터
// replaceAll
String f = "Hello Java";
System.out.println(f.replaceAll("Java", "World")); // Hello World 출력
// substring
String g = "Hello Java";
System.out.println(g.substring(0, 4)); // Hell 출력. 끝위치는 포함 안됨
// toUpperCase
String aa = "Hello Java";
System.out.println(aa.toUpperCase()); // HELLO JAVA 출력
// toLowerCase
String bb = "Hello Java";
System.out.println(bb.toLowerCase()); // hello java 출력
// split
String cc = "a:b:c:d";
String[] result = cc.split(":"); // result는 {"a", "b", "c", "d"}
}
}
5-4. 문자열 포맷 코드
public class Sample {
public static void main(String[] args) {
System.out.println(String.format("저는 %d살 입니다.", 3)); // 저는 3살 입니다.
System.out.println(String.format("저는 %s 입니다.", "스무살")); // 저는 스무살 입니다.
//변수 사용
int age_i = 3;
String age_s = "스무살";
System.out.println(String.format("저는 %d살 입니다.", age_i)); // 저는 3살 입니다.
System.out.println(String.format("저는 %s 입니다.", age_s)); // 저는 스무살 입니다.
System.out.println(String.format("저는 %d살 입니다. 뻥이고 %s 입니다.", age_i, age_s)); // 저는 3살 입니다. 뻥이고 스무살 입니다.
}
}
- 포맷코드랑 숫자 같이 쓸때
- %[숫자]s : 숫자만큼 왼쪽 공백, 대입되는 문자가 오른쪽에 정렬됨
- %-[숫자]s : 숫자만큼 오른쪽 공백 , 대입되는 문자가 왼쪽에 정렬됨
- %.[숫자]f : 숫자만큼 소숫점 표현
6. StringBuffer
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" 출력
StringBuffer 자료형은 append 메서드를 사용하여 계속해서 문자열을 추가해 나갈 수 있다. 그리고 위 예제와 같이 toString() 메서드를 이용하여 String 자료형으로 변경할 수 있다.
StringBuffer는 값을 변경할 수 있다(mutable 하다). 즉 한번 생성된 값을 언제든지 수정할 수 있다.
StringBuffer 자료형은 String 자료형보다 무거운 편에 속한다. 메모리를 많이쓰고 느리다.
문자열 추가나 변경 등의 작업이 많을 경우에는 StringBuffer를, 문자열 변경 작업이 거의 없는 경우에는 그냥 String을 사용하는 것이 유리하다.
6-1. insert 메소드
insert 메소드는 특정 위치에 원하는 문자열을 삽입할 수 있다.
StringBuffer sb =newStringBuffer();
sb.append("jump to java");
sb.insert(0, "hello "); // 0 번째에 hello를 넣는것임
System.out.println(sb.toString());
//출력 hello jump to java
6-2. substring 메소드
substring 메서드는 String 자료형의 substring 메서드와 동일하게 동작한다.
시작위치 ~ 끝위치 를 지정해서 리턴
StringBuffer sb =newStringBuffer();
sb.append("Hello jump to java");
System.out.println(sb.substring(0, 4)); // Hell
7. 배열(Array)
7-1. 배열의 선언과 길이
int[] odds = {1, 3, 5, 7, 9};
String[] weeks = {"월", "화", "수"};
// 위의 요일집합을 아래처럼 바꿀 수 있다.
String[] weeks = new String[3]; // 초기값 없이 배열을 만들때에는 반드시 길이를 적어야한다.
weeks[0] = "월";
weeks[1] = "화";
weeks[2] = "수";
// 배열의 길이
for (int i = 0; i < week.length; i++) {
System.out.println(weeks[i]);
}
8. 리스트(List)
배열과 비슷한 자바의 자료형
리스트는 크기가 정해져 있지 않고 동적으로 변한다
8-1. 리스트 자료형들
List 인터페이스를 구현한 자료형이 있다. (ArrayList, Vector, LinkedList 등)
ArrayList
- add : 입력
- get : 출력
- size : 갯수리턴
- contains : 포함하는지 여부를 불린값으로 출력
- remove : 값이나 인덱스 를 찾아서 삭제하고 결과를 ~~ 으로 리턴
- pitches.remove("129") // 객체 // 결과를 불린으로 리턴
- pitches.remove(0) // 인덱스 // 결과를 삭제된 항목으로 리턴
import java.util.ArrayList;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
ArrayList pitches = new ArrayList();
pitches.add("138");
System.out.println(pitches.get(0));
pitches.add("150");
pitches.add("160");
System.out.println(pitches);
System.out.println(pitches.get(2));
System.out.println(pitches.contains("138")); // true
System.out.println(pitches.contains(138)); // false
pitches.remove(0); // 인덱스 삭제
pitches.add(0, "138");
System.out.println(pitches.remove(0)); // 삭제되면서 값인 138 출력
pitches.add(0, "138");
System.out.println("--------------------------");
System.out.println(pitches.remove("138")); // 138이 있으니까 삭제되고 true를 출력
}
}
8-2. 제네릭스
표현식 이다.
표기법
ArrayList<String> pitches = **new** **ArrayList**<>();
"ArrayList 안에 담을 수 있는 자료형은 String 타입 뿐이다" 라는 것을 의미한다.
우선 제네릭스를 사용하지 않은 경우를 생각해 보자.
ArrayList pitches = new ArrayList();
pitches.add("138");
pitches.add("129");
String one = (String) pitches.get(0);
String two = (String) pitches.get(1);
위처럼 제네릭스를 사용하지 않을 경우에는 **ArrayList 안에 추가되는 객체는 Object 자료형으로 인식**된다.
Object 자료형은 모든 객체가 상속하고 있는 가장 기본적인 자료형이다.
따라서 ArrayList 객체인 pitches에 값을 넣을 때는 문제가 안되지만 값을 가져올 경우에는
항상 Object 자료형에서 String 자료형으로 다음과 같이 형변환(casting)을 해야 한다.
String one = (String) pitches.get(0); // Object 자료형을 String 자료형으로 캐스팅한다.
import java.util.ArrayList;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
ArrayList pitches = new ArrayList();
pitches.add("138");
pitches.add("139");
pitches.add("122");
//String one = (String) pitches.get(0);
//String two = (String) pitches.get(1);
String one = pitches.get(0); // 우측은 Object 자료형이라 에러
String two = pitches.get(1);
ArrayList<String> etcs = new ArrayList<>();
etcs.add("KeyBoard");
etcs.add("Mouse");
etcs.add(2,"Monit");
String ab = etcs.get(0); // 우측도 제네릭스 덕분에 스트링형이라 에러가 아님
String cd = etcs.get(1);
}
}
8-3. asList 메서드
클래스 : java.util.Arrays
이미 존재하는 문자열 배열로 ArrayList를 생성, 또는
바로 문자열 배열을 추가해서 ArrayList를 생성 할 수 있다.s
String[] data = {"138", "129", "142"};
ArrayList<String> pitches = new ArrayList<>(Arrays.asList(data));
ArrayList<String> pitches2 = new ArrayList<>(Arrays.asList( “123”, “456”, “789” ) ) ;
8-4. String.join
String.join("구분자", 리스트객체)와 같이 사용하여 리스트의 각 요소에 "구분자"를 삽입하여 하나의 문자열로 만들 수 있다.
String.join은 다음처럼 문자열 배열에도 사용할 수 있다.
publicclassSample {
publicstaticvoidmain(String[] args) {
String[] pitches =newString[]{"138", "129", "142"};
String result = String.join(",", pitches);
System.out.println(result); // 138,129,142 출력
}
}
8-5. List의 sort 메서드
정렬
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
public class Sample {
public static void main(String[] args) {
ArrayList<String> pitches = new ArrayList<>(Arrays.asList("138", "129", "142"));
pitches.sort(Comparator.naturalOrder()); // 오름차순으로 정렬
// 오름차순(순방향) 정렬 - Comparator.naturalOrder()
// 내림차순(역방향) 정렬 - Comparator.reverseOrder()
System.out.println(pitches); // [129, 138, 142] 출력
}
}
//[129, 138, 142]
9. 맵(Map)
Map은 Key와 Value를 한 쌍으로 갖는 자료형이다.
9-1. Map 자료형들
Map역시 인터페이스이다. Map 자료형에는 HashMap, LinkedHashMap, TreeMap 등이 있다.
- LinkedHashMap은 입력된 순서대로 데이터를 저장하는 특징을 가지고 있다.
- TreeMap은 입력된 key의 오름차순 순서로 데이터를 저장하는 특징을 가지고 있다.
HashMap
- put
- get
- getOrDefault : null 대신 디폴트값을 받을 수 있음.
- containsKey : 키가 있는지 조사 후 참, 거짓으로 리턴
- remove : 키에 해당하는 아이템(key, value) 를 삭제한후 밸류 리턴
- size : map의 갯수를 리턴
- keySet : Map의 모든 Key를 모아서 Set 자료형으로 리턴한다.
import java.util.HashMap;
public class Sample {
public static void main(String[] args) {
HashMap<String,String> map = new HashMap<>();
map.put("1반", "김철수");
map.put("2반", "성홍길");
System.out.println(map.get("1반")); // 김철수
System.out.println(map.get("100반")); // null
map.getOrDefault("키", "기본값");
System.out.println(map.get("키")); // null
map.put("키2",map.getOrDefault("키2","기본값2"));
System.out.println(map.get("키2")); // 기본값2
System.out.println(map.containsKey("1반")); // true
System.out.println(map.containsKey("100반")); // false
System.out.println(map.remove("1반")); // 김철수
System.out.println(map.get("1반")); // null
System.out.println(map.size()); // 2. 하나가 삭제되었으니 2
System.out.println(map.keySet()); // [2반 , 키2] 출력
// Set자료형을 List자료형으로 변환
// List<String> keyList = new ArrayList<>(map.keySet());
}
}
10. 집합(Set)
- 중복을 허용하지 않는다.
- 순서가 없다(Unordered).
10-1. Set 자료형들
Set 인터페이스를 구현한 HashSet, TreeSet, LinkedHashSet 등의 Set자료형이 있다.
- TreeSet - 오름차순으로 값을 정렬하여 저장하는 특징이 있다.
- LinkedHashSet - 입력한 순서대로 값을 정렬하여 저장하는 특징이 있다.
- HashSet
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
public class Sample {
public static void main(String[] args) {
// Set 자료형 생성
HashSet<String> tgk = new HashSet<>(Arrays.asList("H","e","l","l","o"));
System.out.println(tgk); // [e, H, l, o]
// 교집합, 합집합, 차집합 구하기 (제네릭스로 int를 사용하고 싶은 경우에는 int의 Wrapper 클래스인 Integer를 대신 사용해야 한다.)
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);
intersection.retainAll(s2);
System.out.println(intersection); // [4, 5, 6]
// 합집합
HashSet<Integer> union = new HashSet<>(s1);
union.addAll(s2);
System.out.println(union); // [1,2,3,4,5,6,7,8,9]
// 차집합
HashSet<Integer> substract = new HashSet<>(s1);
substract.removeAll(s2);
System.out.println(substract); // [1, 2, 3] // s1 에서 s2에 해당하는 집합들을 뺀것
// 값 추가 (add)
HashSet<String> set1 = new HashSet<>();
set1.add("My");
set1.add("Name");
set1.add("is");
System.out.println(set1); // [is, My, Name]
// 값 여러개 추가 (addAll)
HashSet<String> set2 = new HashSet<>();
set2.add("My");
set2.addAll(Arrays.asList("Name","is"));
System.out.println(set2); // [is, My, Name]
// 특정 값 제거하기 (remove)
HashSet<String> set3 = new HashSet<>(Arrays.asList("My","Name","is"));
set3.remove("Name");
System.out.println(set3); // [is, My]
}
}
11. Enum
여러 개의 상수 집합을 정의할 때 사용하는 자료형
public class Sample {
enum CoffeeType {
AMERICANO,
ICE_AMERICANO,
CAFE_LATTE
};
public static void main(String[] args) {
System.out.println(CoffeeType.AMERICANO); // AMERICANO 출력
System.out.println(CoffeeType.ICE_AMERICANO); // ICE_AMERICANO 출력
System.out.println(CoffeeType.CAFE_LATTE); // CAFE_LATTE 출력
}
}
'JAVA' 카테고리의 다른 글
[JVM] JVM 메모리구조와 동작방식 (0) | 2023.06.29 |
---|---|
[JAVA] 객체지향 복습 Quiz (0) | 2023.06.20 |
[JAVA] 객체지향 복습 (0) | 2023.06.20 |
[Java] 소스코드 형태 복습 (0) | 2023.06.18 |