Java/Basic

자료형

yunajoe 2022. 10. 28. 22:29

자바의 자료형은 크게 2가지로 나뉜다 
1. 원시 자료형(Primitive Types) 
- 총 8가지 (byte, short, int, long, double, float, boolean, char)
- 실제 값을 저장하는 공간으로 스택(Stack) 메모리에 저장
- new키워드로 값을 생성할 수 없다. 오직 리터럴(literal)로만으로 생성 가능 
- 8가지 primitve class는 각각 wrapper class를 가지고 있다 
 (wrapper class는 원시 자료형을 primitve type으로 사용할 수 있게 해준다)

Primitive Type
primitve class는의  wrapper class들



2. 참조형 자료형(Reference Types) 
-  원시 자료형을 제외한 모든 자료형 
-  값이 저장되어 있는 곳의 주소값을 저장하는 공간으로 힙(Heap) 메모리에 저장


// 숫자 

1. 정수  
int, long, byte, short 
2. 실수 
float, double   

3. 8진수 16진수 (int 자료형으로 표시) 

8진수
- 0(숫자 '0')으로 시작
- 0부터 7까지의 숫자를 사용 
- int octal = 023;  // 십진수: 19

==============================

16진수 
- 0x(숫자 '0' + 알파벳 'x')로 시작
- 0부터 9까지의 수와 A에서 F까지의 로마 문자를 사용하고, 이때 대소문자는 구별하지 않는다.
- int hex = 0xC;   

4. 숫자연산(+, -, *, /, %)

public class Main{
   public static void main(String[] args){
       int a = 10;
       int b = 5;
       System.out.println(a+b);
       System.out.println(a-b);
       System.out.println(a*b);
       System.out.println(a/b);
       System.out.println(a%b);
   }
}
 
5. 증감연산(++, --) 
public class Main{
   public static void main(String[] args){
       int a = 10;
       System.out.println(a);  // 10 
       System.out.println(a++);  // a++ 하고 나서 증가,  10 
       System.out.println(a); // 11 
       System.out.println(++a);  // ++a 하는 순간에 바로 증가, 12
   }
}

 

// 불(boolean) 
-  참(true) 또는 거짓(false) 의 값을 갖는 자료형

boolean isSuccess = true;
boolean isTest = false;

// 문자(char) 
- 한 개의 문자 값에 대한 자료형(char) 
- 문자값을 '(단일 인용부호)로 감싸주어야 한다는 점

char a1 = 'a';  // 문자로 표현
char a2 = 97;  // 아스키코드로 표현
char a3 = '\u0061';  // 유니코드로 표현

// 문자열(String)    
- 표기 방식이 2가지 있다  
1) 리터럴 표기법은 "happy java" 라는 문자열을 intern pool 이라는 곳에 
저장하고 다음에 다시 동일한 문자열이 선언될때는 cache 된 문자열을 리턴  
2) 항상 새로운 String 객체를 만든다

1. String a = "Happy Java";   # 리터럴 표기 방식

2. String a = new String("Happy Java");  # 객체 생성 방식


- 문자열 내장 메소드 
equals, indexOf, contains, charAt, replaceAll, substring, toUpperCase, split

cf. equals vs == 
equals은 값을 비교 
==은 값의 주소를 비교( 동일한 객체인지?!)


// StringBuffer() 
-  문자열을 추가하거나 변경 할 때 주로 사용하는 자료형
- 메서드  append, insert, substring 

// Array()
- 배열의 길이는 고정되어 있다   

// List 
- 리스트와 배열의 가장 큰 차이는 크기가 정해져 있지 않고 동적으로 변한다는 점
- List의 자료형은에는  ArrayList, Vector, LinkedList 등의 List 인터페이스를 구현한 자료형이 있다

 cf. 제네릭스(Generics) 
ArrayList<String> pitches = new ArrayList<String>();
ArrayList<String> pitches = new ArrayList<>();  // 선호되는 방식
=>  첫번째 코드의 <String> 이라는 제네릭스 표현식은 "ArrayList 안에 담을 수 있는 자료형은 String 타입 뿐이다" 라는 것을 의미
=> <Integer>, <Animal>, <Dog> 등 어떤 자료형도 사용가능 

제네릭스를 안 쓴 경우?!  
ArrayList pitches = new ArrayList();

 

// 맵(Map)   
-  리스트나 배열처럼 순차적으로(sequential) 해당 요소 값을 구하지 않고 key를 통해 value를 얻는다. 맵(Map)의 가장 큰 특징이라면 key로 value를 얻어낸다는 점  
- Map의 가장 큰 특징은 순서에 의존하지 않고 key로 value를 가져오는데 있다. 하지만 가끔은 Map에 입력된 순서대로 데이터를 가져오고 싶은 경우도 있고 때로는 입력된 key에 의해 소트된 데이터를 가져오고 싶을 수도 있을 것이다. 
이런경우에는 LinkedHashMap과 TreeMap을 사용하는 것이 유리

// 셋(Set) 
- Set 자료형에는 HashSet, TreeSet, LinkedHashSet 등의 Set 인터페이스를 구현한 자료형
- 리스트나 배열은 순서가 있기(ordered) 때문에 인덱싱을 통해 자료형의 값을 얻을 수 있지만 집합 자료형은 
순서가 없기(unordered) 때문에 인덱싱으로 값을 얻을 수 없다
(순서가 없는 자료형이라 인덱싱을 지원하지 않는다) 

// enum 

// 형변환   

public class Main{
   public static void main(String[] args){
        // 문자를 정수로 바꾸기
       String num = "123";
       int n = Integer.parseInt(num);  //   Integer는 int자료형의 Wrapper 클래스
       System.out.println(n);

       // 정수를 문자료 바꾸기
       int n2 = 123;
       String num2 = String.valueOf(n2);
       String num3 = Integer.toString(n2);
       System.out.println(num2);
       System.out.println(num3);
   }
}


// final
- 자료형에 값을 단 한 번만 설정할 수 있게 강제하는 키워드 
- 프로그램 수행 도중 그 값이 변경되면 안되는 상황에 사용   

public class Main{
   public static void main(String[] args){  
       final int n = 123; // final로 설정하면 값을 바꿀 수 없다
       n = 456;   
       }
}


// java: cannot assign a value to final variable n 오류가 난다


//실습

1. 평균점수구하기 


public class Main{
   public static void main(String[] args) {
        int korean = 80;
        int eng = 75;
        int math = 55;
        int avg = (korean + eng + math) / 3;
        System.out.println(avg);
   }
}


2. 자연수 13이 홀수인지 짝수인지 판별할 수 있는 방법
public class Main{
   public static void main(String[] args) {
        int n = 13;
        if (n % 2 ==0){
            System.out.println("짝수입니다");
        }
        System.out.println("홀수입니다");
   }
}


3. 홍길동 씨의 주민등록번호는 881120-1068234이다.
 홍길동 씨의 주민등록번호를 연월일(YYYYMMDD) 부분과 
그 뒤의 숫자 부분으로 나누어 출력


public class Main{
   public static void main(String[] args) {
        String str = "881120-1068234";
        String former = str.substring(0,6);
        String latter = str.substring(7,str.length());
        System.out.println(former);
        System.out.println(latter);
   }
}

4. 주민등록번호 뒷자리의 맨 첫 번째 숫자는 성별을 나타낸다. 주민등록번호에서 성별을 나타내는 숫자를 출력
public class Main{
   public static void main(String[] args) {
       String pin = "881120-1068234";
       String[] result = pin.split("-");
       String latter = result[1]; // 1068234
       char ch = latter.charAt(0);
       System.out.println(ch);
   }
}


5. 다음과 같은 문자열 a:b:c:d가 있다. 
문자열의 replace 함수를 사용하여 a#b#c#d로 바꿔서 출력해 보자.


public class Main{
   public static void main(String[] args) {
       String a = "a:b:c:d";
       a = a.replace(":", "#");
       System.out.println(a);  
   }
}


======================