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을 상속받은 자료형중 하나
가 바로HashMap
key
와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순
으로데이터가 출력
되는 특징