01 숫자(number)

  • 정수
자료형표현범위
int-2147483648 ~ 2147483647
long-9223372036854775808 ~ 9223372036854775807

long 변수에 값을 대입할 때 숫자 값이 2147483647 보다 클 경우 L 접미사를 붙여야 함

(생략시 컴파일 에러)

  • 실수
자료형표현범위
float−3.4∗1038 ~ 3.4∗1038
double−1.7∗10308 ~ 1.7∗10308

디폴트가 double, float 변수를 사용하고 싶으면 F접미사를 붙여야 함

e2와 같이 쓰면 10의 제곱 의미

  • 8진수, 16진수

0(숫자 '0')으로 시작하면 8진수, 0x(숫자 '0' + 알파벳 'x')로 시작하면 16진수

int octal = 023;    // 십진수: 19
int hex = 0xC;     // 십진수: 12

숫자 연산

  • 사칙연산 - +,-,*,/
  • 나머지 반환 - %
  • 증감연산 - ++, --
💡 주의) ++연산자는 변수명 뒤에 붙으면(i++) 해당 코드가 실행되는 순간이 아닌 코드가 실행된 이후 값이 변경↔ ++i 로 위치를 바꾸면 i값이 증가된 이후 코드가 실행
  • i++ : 값이 참조된 후에 증가
  • ++i : 값이 참조되기 전에 증가

02 불(boolean)

  • 참 또는 거짓 (true or false)
  • boolean을 앞에 붙임 boolean isTall = height>base;

03 문자(char)

  • string과 달리 한 개의 문자값에 대한 자료형
  • 3가지 표현방식
char a1 = 'a';  // 문자로 표현
char a2 = 97;  // 아스키코드로 표현
char a3 = '\u0061';  // 유니코드로 표현

04 문자열(string)

  • literal 표기(String a = "happy java”) : 객체 생성없이 고정된 값을 그대로 대입, 문자열을 JVM의 intern pool 이라는 메모리 공간에 저장
  • 객체생성 방식(String b = new String("happy java")) : 항상 새로운 stirng 객체 생성

Primitive 자료형

  • int, long, double, float, boolean, char 자료형
  • new 키워드로 그 값을 생성할 수 없음
  • literal로만 값을 지정 가능

원시 자료형의 Wrapper 클래스

원시 자료형은 다음처럼 각각에 대응하는 Wrapper 클래스들이 존재

  • wrapper class란?
    • 자바 API 클래스중 하나
    • 자바의 자료형은 primitive type(기본 타입) 과 reference type(참조 타입)이 존재
      • 기본 타입 : byte, short, char, int, long, float, double, boolean
      • 참조 타입 : class, interface ..
    • 8개의 기본 타입에 해당하는 데이터를 객체로 표현하기 위해 포장해 주는 클래스가 바로 wrapper class(래퍼 클래스)
      • 예를 들어, 메소드의 파라미터로 객체 타입만이 요구될 경우

        • 기본 타입의 데이터를 그대로 사용할 수 도 있지만 (AutoBoxing을 통해)
        • 기본 타입의 데이터를 먼저 객체로 변환후 작업을 수행해야한다.
      • 기본 타입은 값을 갖는 객체인 포장 객체를 생성할 수 있다. (기본 타입의 값을 내부에 두고 포장하기때문에 '포장 객체'라 칭한다.)

        • wrapper class는 각 타입에 해당하는 데이터를 파라미터로 전달받아, 해당 값을 가지는 객체로 만들어준다.
      • wrapper class로 감싸고 있는 기본 타입 값은 외부에서 변경할 수 없다.
        - 변경하기 위해서 새로운 포장객체를 만들어야 한다.

        Wrapper Class란

원시자료형Wrapper 클래스
intInteger
longLong
doubleDouble
floatFloat
booleanBoolean
charChar

ArrayList, HashMap, HashSet 등은 데이터를 생성할때 원시 자료형 대신 그에 대응하는 Wrapper 클래스를 사용해야 함

원시 자료형 대신 Wrapper 클래스를 사용하면 값 대신 객체를 주고 받을 수 있어 코드를 객체 중심적으로 작성하는데 유리하다. 또한 멀티스레딩 환경에서 동기화를 지원하기 위해서도 Wrapper 클래스는 반드시 필요하다.

문자열 메서드

  • equals - 문자열이 동일한지 비교해서 같으면 true 다르면 false (문자열 비교할 때 == 못씀)
  • indexOf - 문자열에서 특정 문자열이 시작되는 위치(인덱스)를 리턴 (자바는 숫자를 0부터 셈)
  • contains - 특정 문자열이 포함되어 있는지의 여부를 리턴(있으면 true)
  • charAt - 문자열에서 특정 위치의 문자(char)를 리턴
  • replaceAll - 문자열 중 특정 문자열을 다른 문자열로 바꾸고자 할 때 ex) a.replaceAll(”a”,”b”);
  • substring - 문자열 중 특정 부분을 뽑아낼 때 ex) substring(시작위치, 끝위치) → 시작위치에서 끝위치-1 의 문자를 뽑아냄
  • toUpperCase - 문자열을 모두 대문자로 변경
  • split - 문자열을 특정 구분자로 나누어 문자열 array로 리턴 ex) a.split(”:”)

문자열 포매팅

String.format 매서드 사용 ex) String.format(”i love %s”, “you”)

변수나 두 개 이상의 값도 대입 가능

코드설명
%s문자열(String)
%c문자 1개(character)
%d정수(Integer)
%f부동소수(floating-point)
%o8진수
%x16진수
%%Literal % (문자 % 자체)

%s → 어떤 형태의 값이든(정수, 소수..) 전달되는 파라미터 값을 문자열로 바꾸어 사용

%10s → 전체 길이 10인 문자열 공간, 대입되는 값을 오른쪽 정렬하고 나머지는 공백으로

**System.out.printf**

String.format 과 System.out.printf

전자) 문자열 리턴, 후자) 문자열 출력

String.format 없이 바로 포매팅해서 문자열 출력하는 함수


05 StringBuffer

  • 문자열을 추가하거나 변경할 때 사용하는 자료형
  • toString() 메서드로 string 자료형으로 변경가능

StringBuffer의 메소드

  • append - 문자열 추가 그냥 stirng 자료형에 + 연산하는 것과 달리 객체를 한번만 생성, 수정가능
  • insert - 특정 위치에 문자열 삽입
  • substring

StringBuilder 자료형

StringBuffer와 유사, 멀티 스레드에는 buffer가 적합하고 성능은 얘가 좋음


06 배열(Array)

  • 자료형의 집합
  • 자료형 타입 바로 옆에 [] 기호를 사용하여 표현 ex) int 자료형의 배열은 int[] 로 표현한
  • 배열의 길이는 고정! 배열의 길이를 먼저 설정한 후 값을 나중에 대입(설정하지 않으면 오류)
  • 인덱싱을 통해 배열 값에 접근
  • length를 통해 배열의 길이 얻을 수 o

07 리스트(List)

List<자료형> 리스트 명 = new ArrayList(or LinkedList)<자료형(생략가능)>();

  • 인터페이스의 일종 - ArrayList, Vector, LinkedList의 종류가 있음
  • ArrayList나 LinkedList를 사용하기 위해서는 java.util 패키지에 있는 ArrayList나 LinkedList, List를 선언해야 함 (import java.util.ArrayList;)
  • array와 달리 길이가 동적으로 변동 가능
  • <> 제너릭으로 명시해야 함

ArrayList 메서드

  • add - 리스트에 요소 삽입
  • get - 특정 인덱스 값 추출
  • size - list의 갯수 리턴
  • contains - 리스트 안에 파라미터 항목이 있는지 판별해서 bool타입으로 리턴
  • remove - 객체를 삭제하고 bool타입으로 리턴하거나 인덱스를 파라미터로 주면 인덱스에 해당하는 항목을 삭제하고 삭제된 항목을 리턴
  • sort - 오름차순 혹은 내림차순으로 리스트를 정렬 import java.util.Comparator; 필요
    • 오름차순(순방향) 정렬 - Comparator.naturalOrder()
    • 내림차순(역방향) 정렬 - Comparator.reverseOrder()
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());  // 오름차순으로 정렬
        System.out.println(pitches);  // [129, 138, 142] 출력
    }
}

제너릭스

  • ArrayList()같은 자료형 타입 옆에 같은 문구
  • 더 명확한 타입을 명시할 수 있음.
  • ArrayList<String> pitches = **new** **ArrayList**<>(); → arraylist안에 담을 수 있는 자료형은 string타입 뿐이라는 뜻
  • 제너릭스를 명시하지 않으면 추가되는 객체는 object 자료형으로 인식됨 → string으로 사용할 경우 다음과 같이 형변환 필요
String one = (String) pitches.get(0); // Object 자료형을 String 자료형으로 캐스팅한다.
  • 제너릭스로 명시할 시 형변환 과정이 필요x

**ArrayList 생성**

  • add메서드 사용
  • 이미 존재하는 array를 활용→ Arrays.asList(array데이터 or string자료형 여러개)

String.join

String.join("구분자", 리스트객체) 형태

  • 각 요소 사이에 구분자를 삽입하고 싶을 때 사용
  • 리스트를 연속된 string으로 만들 때에도 사용 ex) String.join(””,List)

08 맵(Map)

  • associative array, hash라고도 불리는 대응관계를 표현해주는 자료형
  • list와 마찬가지로 인터페이스
  • 순차적 방식이 아닌 key-value방식으로 하나의 쌍으로 저장(파이썬의 dictionary와 유사)
  • HashMap, LinkedHashMap, TreeMap 등이 있음

HashMap

  • key value 모두 string 타입
  • key와 value를 묶어 하나의 entry로 저장
  • 해시 알고리즘을 사용 → 많은 양의 데이터를 빠르게 검색

put

key와 value 쌍을 추가

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", "야구");
    }
}

get

key에 해당하는 value값 얻을 때

key에 해당하는 value가 없으면 null이 리턴. 디폴트 값을 얻고 싶을 때는 getOrDefault 메서드를 사용

containsKey

맵에 해당하는 key가 있는지 유무를 참 거짓으로 리턴

remove

맵(Map)의 항목을 삭제하는 메서드로 key값에 해당되는 아이템(key, value)을 삭제한 후 그 value 값을 리턴

****size****

Map의 총 key 갯수를 리턴

keySet

keySet은 맵(Map)의 모든 Key를 모아서 리턴

LinkedHashMap

  • HashMap은 key의 순서가 입력한대로 순차적으로 지켜지지 않음
  • LinkedHashMap은 입력된 key의 순서대로 데이터를 저장, 사용법은 HashMap과 동일

TreeMap

  • key와 value 쌍을 이진 검색 트리의 형태로 저장(key의 오름차순 순서)
  • 데이터 추가 및 제거 속도 빠름
  • 이진 검색 트리의 성능을 향상시킨 레드-블랙 트리로 구현

09 집합(set)

HashSet<String> set = **new** **HashSet**<>(Arrays.asList("H", "e", "l", "l", "o"));

  • Set 인터페이스
  • list와 달리 중복값을 삽입할 수 없고 순서가 없음(인덱싱x)
  • 인터페이스 import 후 HashSet을 사용하여 생성

집합 메서드

  • retainAll - 교집합
  • addAll - 합집합, 여러개의 값 한 번에 추가하기(array
  • removeAll - 차집합
  • add - 집합에 값 추가하기
  • remove - 특정 값 제거 set.remove(”제거하고자 하는 값”)

Treeset & LinkedHaseSet

  • TreeSet - 오름차순으로 값을 정렬하여 저장
  • LinkedHashSet - 입력한 순서대로 값을 정렬하여 저장

10 상수집합(Enum)

  • 관련이 있는 여러 개의 상수 집합을 정의할 때 사용하는 자료형
enum CoffeeType {
    AMERICANO,
    ICE_AMERICANO,
    CAFE_LATTE
};

/**
 * countSellCoffee는 판매된 커피의 갯수를 리턴하는 메서드이다.
 * @param type 커피의 종류 (CoffeType)
 */
int countSellCoffee(CoffeType type) {
    ... 생략 ...
}

int americano = countSellCoffee(CoffeType.AMERICANO);  // 아메리카노의 판매갯수
  • 매직 넘버를 사용할 때보다 코드를 명확하게 함
  • 잘못된 값을 사용함으로 인해 발생할수 있는 위험성이 사라짐

형변환

문자열→정수 : Wrapper 클래스를 이용 Integer.parseInt(문자열)

정수→문자열 : 정수 앞에 빈 문자열 더하기, String.valueOf(정수)Integer.toString(정수)

문자열→소수 : Double.parseDouble 또는 Float.parseFloat

정수→실수 : double 새로운실수 = 정수;

실수→정수 : int 새로운정수 = (int) 실수; 캐스팅 (int) 을 이용

문자열→실수 : Double.parseDouble() 사용

final

값을 설정하면 그 값을 다시 설정할 수 없도록 만드는 키워드

프로그램 수행 도중 값이 변경되면 안 될 때 사용

리스트 → final로 선언해도 add와 removesm는 가능. 이거까지도 불가능하게 하고 싶으면 List.of()를 사용해야 함

profile
아이쿠

0개의 댓글

Powered by GraphCDN, the GraphQL CDN