ref :
https://gbsb.tistory.com/6
https://coding-factory.tistory.com/547
https://www.youtube.com/watch?v=-mqL3LJ4iVc&list=PLW2UjW795-f5JPTsYHGAawAck9cQRw5TD&index=12
메서드 수행에 필요한메모리가 제공되는공간메서드가호출되면호출스택에메모리 할당/종료되면해제아래 있는 메서드가위의 메서드를호출맨 위에 메서드 하나만 실행중,나머지는 대기중멀티 쓰레드 프로그래밍시에는각 쓰레드당하나의 호출 스택을 가짐호출스택은Stack 영역에 할당되며,new로 할당하는 필드 변수들은Heap영역에 할당
데이터 타입(Data Type)
- Java에서는
2개의 데이터 타입(Data Type)이 존재
- 원시형 타입(
primitive type)
8가지 기본형 타입을미리 정의하여제공기본값이 있기 때문에Null을 가질 수 없음(Null이 필요하면래퍼 클래스 활용)실제 값을 저장하는 공간으로스택(Stack) 메모리사용리터럴로 값을 세팅기본형 클래스가존재하는 이유-->바로 값을 참조해서객체보다성능이 좋음- ex)
int, long, double, float, boolean, char등- 참조형 타입(
reference type)
기본형 타입을 제외한모든 타입빈 객체를 의미하는Null이 존재값이 저장되어 있는 곳의주소값을 저장하는 공간으로힙(Heap) 메모리에 저장
래퍼 클래스(Wrapper Class)
- 래퍼 클래스(
Wrapper Class) ?
기본 자료형 타입을객체로 다루기 위해 사용하는 클래스Integer/Long/Byte/Double/Float등은Number 클래스를 상속 받아 구현됨
- 정수
- int
- long :
값의 범위가int영역을 넘어간다면반드시L을 숫자 뒤에 붙여야 한다
(보통Long형을 표시하기 위해 붙힘)- 실수
- float :
Java에서실수는 기본적으로double로 처리가 되기에,F를 붙혀float으로 표기
(붙히지 않으면컴파일 오류발생)- double
String
- String
- 문자열 표기 자료형
- 유용한 메소드
- equals :
값이 동등한지 검사 (==로 검사하면인스턴스 자체를 비교하게 된다)- indexOf :
문자열에서특정 문자가 시작되는 인덱스리턴- replaceAll :
문자열중특정 문자를다른 문자로바꾸고 싶을 때사용- substring :
문자열중특정 부분을 추출하기 위해 사용- toUpperCase : 문자열을 모두
대문자로 변경- toLowerCase : 문자열을 모두
소문자로 변경/* equals */ String a = "hello"; String b = new String("hello"); System.out.println(a.equals(b)); // true System.out.println(a==b); // false /* indexOf */ String a = "Hello Java"; System.out.println(a.indexOf("Java")); // 6 /* replaceAll */ String a = "Hello Java"; System.out.println(a.replaceAll("Java", "World")); // Hello World /* substring -> substring(시작위치, 끝위치) 끝위치는 포함 X */ String a = "Hello Java"; System.out.println(a.substring(0, 4)); // Hell /* toUpperCase 또는 toLowerCase*/ String a = "Hello Java"; System.out.println(a.toUpperCase()); // HELLO JAVA System.out.println(a.toLowerCase()); // hello java
StringBuffer
- 설명
문자열을추가하거나변경할 때주로 사용하는 자료형String은 불변(immutable) 객체라서생성 후 변경할 수 없음
-->새로운 String을 만들어서반환해줄 뿐StringBuffer은 변경 가능(muttable) 하기에추가,변경이 있을 때메모리가 더 효율적!
- 유용한 메소드
- append :
가장 뒤에 문자열 추가- insert :
특정 위치에문자열 삽입- substring :
String과 동일/* String -> 변경이 있을 때 마다 새로운 String을 반환 --> 메모리 많이 사용 */ String temp = ""; temp += "hello"; temp += " "; temp += "jump to java"; System.out.println(temp); /* StringBuffer --> 변경 가능 */ StringBuffer sb = new StringBuffer(); sb.append("hello"); sb.append(" "); sb.append("jump to java"); System.out.println(sb.toString());
- 정리
일반적으로 문자열을 사용할때에는String사용StringBuffer는문자열을 추가할 때내부적으로 객체가 생성되고,메모리가 사용되는 과정에서더 효율적- 하지만, 기본적으로
String보다 무거워서사용하는데cost가 더 사용되므로문자열의추가나 변경등의 작업이많을 때 사용
같은 타입 자료형의데이터를 저장하는 자료구조- 길이가
고정적인덱스를 통해 요소에 접근String[] week = new String[7]; weeks[0] = "월"; weeks[1] = "화"; weeks[2] = "수"; weeks[3] = "목"; weeks[4] = "금"; weeks[5] = "토"; weeks[6] = "일"; System.out.println(week.length); // 7
ArrayList
- Java에서
List는인터페이스이며,이것을 구현한 자료형 중 하나가ArrayList리스트(List) 자료구조중배열과 비슷한 자료형- 길이가
동적이며,편리한 기능을 더 많이 가진배열(Array)라고 생각하면 됨ArrayList<String> pitches = new ArrayList<String>(); 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 // remove는 해당 요소를 삭제한 뒤 삭제한 결과를 반환 System.out.println(pitches.remove("129")); // true System.out.println(pitches.size()); // 2 System.out.println(pitches.remove(0)); // 138 --> 0번 인덱스 삭제 후 삭제값 반환 // remove(객체)는 리스트에서 객체에 해당되는 항목을 삭제하고 삭제 여부를 반환 // remove(인덱스)는 해당 인덱스의 항목을 삭제하고 삭제된 항목을 반환
LinkedList
<>를 통해타입을명시적으로 선언하는표기법하나혹은그이상의타입을선언하기도 한다- 장점
- 타입의 안정성
:의도하지 않은 타입의 객체가저장되는 것을 막고,다른 타입의 객체로 발생하는문제를 예방- 불필요한 형변환을 줄여 코드의 간결함 제공
:다른 타입의 객체가 저장되지 않기때문에 사용할 때에도불필요한 형 변환이 없음/* Generics 등장 이전 */ ArrayList aList = new ArrayList(); aList.add("hello"); aList.add("java"); String hello = (String) aList.get(0); String java = (String) aList.get(1); /* Generics 등장 이후 */ ArrayList<String> aList = new ArrayList<String>(); aList.add("hello"); aList.add("java"); String hello = aList.get(0); String java = aList.get(1);
HashMap
- Java에서
Map은인터페이스이며,Map을 상속받은 자료형중 하나가 바로HashMapkey와value로 구성되며,key를 통해value에빠르게 접근 가능HashMap<String, String> map = new HashMap<String, String>(); map.put("people", "사람"); map.put("baseball", "야구"); System.out.println(map.get("people")); // 사람 System.out.println(map.containsKey("people")); // true System.out.println(map.remove("people")); // 삭제된 key의 value 출력 System.out.println(map.size()); // 1
LinkedHashMap & TreeMap
Map의 가장 큰 특징은순서에 의존하지 않고 key로 value를 가져오는 것- 때에 따라
Map에 입력된 순서대로 데이터를 가져오거나,sort된 데이터를 원할때사용하는 것이 바로LinkedHashMap/TreeMap- LinkedHashMap
입력된 순서대로데이터가 출력되는 특징
- TreeMap
입력된 key의 sort순으로데이터가 출력되는 특징