Java 기본(1) - 호출 스택 / 데이터 타입 / 자료형

김정욱·2021년 6월 12일
0

Java

목록 보기
1/13
post-thumbnail

ref :
https://gbsb.tistory.com/6
https://coding-factory.tistory.com/547
https://www.youtube.com/watch?v=-mqL3LJ4iVc&list=PLW2UjW795-f5JPTsYHGAawAck9cQRw5TD&index=12

호출 스택(Call Stack)

  • 메서드 수행에 필요한 메모리가 제공되는 공간
  • 메서드호출되면 호출스택메모리 할당 / 종료되면 해제
  • 아래 있는 메서드위의 메서드호출
  • 맨 위에 메서드 하나만 실행중, 나머지는 대기중
  • 멀티 쓰레드 프로그래밍시에는 각 쓰레드하나의 호출 스택을 가짐
  • 호출스택Stack 영역에 할당되며, new로 할당하는 필드 변수들은 Heap영역에 할당

데이터 타입(Data Type)

데이터 타입(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 클래스를 상속 받아 구현됨

숫자(Number)

  • 정수
    • int
    • long : 값의 범위int영역을 넘어간다면 반드시 L을 숫자 뒤에 붙여야 한다
      (보통 Long형을 표시하기 위해 붙힘)
  • 실수
    • float : Java에서 실수는 기본적으로 double로 처리가 되기에, F 를 붙혀 float으로 표기
      (붙히지 않으면 컴파일 오류 발생)
    • double

문자열(String / StringBuffer)

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가 더 사용되므로 문자열추가나 변경등의 작업많을 때 사용

배열(Array)

  • 같은 타입 자료형데이터를 저장하는 자료구조
  • 길이가 고정적
  • 인덱스를 통해 요소에 접근
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

리스트(List)

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)

  • <>를 통해 타입명시적으로 선언하는 표기법
  • 하나 혹은 그이상타입선언하기도 한다
  • 장점
    • 타입의 안정성
      : 의도하지 않은 타입의 객체저장되는 것을 막고, 다른 타입의 객체로 발생하는 문제를 예방
    • 불필요한 형변환을 줄여 코드의 간결함 제공
      : 다른 타입의 객체가 저장되지 않기때문에 사용할 때에도 불필요한 형 변환이 없음
/* 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);

맵(Map)

HashMap

  • Java에서 Map인터페이스이며, Map을 상속받은 자료형중 하나가 바로 HashMap
  • keyvalue로 구성되며, 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순으로 데이터가 출력되는 특징

profile
Developer & PhotoGrapher

0개의 댓글