JAVA - 2. 프리미비트 타입, 변수, 배열

박원종·2022년 7월 6일
0

JAVA STUDY

목록 보기
2/3
post-thumbnail

프리미티브 타입 종류와 값의 범위, 기본 값


char 변수는 유니코드(정수)로 저장 되므로 정수형 또는 실수형과 연산 가능
int 는 +-약 20억 -> 코테 공부할때 알면 좋음
long은 약 19자리까지 표현가능

프리미티브 타입과 레퍼런스 타입

프리미티브 타입 : boolean, char, byte, short, int, long, float, double

레퍼런스 타입 : 프리미티브 타입을 제외한 모든 타입
ex) class, interface, enum, array, String type

상수

  • 키워드 final을 사용해 선언한 변수
  • 선언과 동시에 초기화 해야하고, 변경이 불가
 final int MAX_SPEED =10;

리터럴

구체적인 숫자나 문자
리터럴 -> 구체적인 숫자나 문자
변수나 상수를 안쓰고 리터럴로만 할수도 있잖아!
-> 우린 이걸 하드코딩이라고 부르기로 했어요


int triangleArea = (20*10)/2;
int rectangleArea = 20 * 10;

//여기서 20과 10이 길이 높이인데 변경하고 싶다면 위아래 4군데를 고쳐야함
//이 방식은 하드코딩(리터럴 사용)을 한셈.
final int WIDTH = 20;  // 여기서 길이와
final int HEIGHT = 10;  // 높이를 변경해주면 아래에 코드에도 자동으로 반영

int triangleArea = (WIDTH*HEIGHT)/2;
int rectangleArea = WIDTH * HEIGHT;
//유지보수가 굉장히 유용하다는 장점 

리터럴 타입

  • long num = 100L;
  • float pi = 3.14f;
  • double rate = 1.618d;
  • int octNum = 010; // 8진수 10, 앞에 0을 붙여표현
  • int hexNum = 0x10; //16진수 10, 앞에 0x 붙여 표현
  • int binNum = 0b10; //2진수 10, 앞에 0b를 붙여 표현
    e는 10의 제곱 나타냄
  • 3.14e3f = 3.14 x 10^3 f = 3140.0f
  • 1e-3d = 1 x 10^-3d = 0.001d (d는 실수형의 기본형이기 때문에 생략가능)

char(문자리터럴) vs String(문자열 리터럴)

char

  • ‘A’ 와 같이 작은 따옴표를 사용하며, 문자 하나만 가능
  • ‘’ 빈 문자를 허용하지 않는다 -> 반드시 하나 문자 필요
  • ‘ ‘ 공백문자 허용
    char ch = 'A';
     char ch = 65; //둘은 동일
     char ch =''; //불가, 빈문자
     char ch =' '; //스페이스(공백) 은 허용

String

  • “JAVA” 와 같이 “ ” 큰따옴표 사용, 문자 여러개 가능
  • “” 빈 문자열도 허용
  • String은 참조 타입(클래스) 이므로 사실 new 키워드를 사용하는 것이 맞긴함
    String name = new String("name");
  • 문자열 덧셈을 지원하긴 하나 자주 변경되는 경우엔 사용하지 않는 것이 좋음
    String name = "Ja";
     name += "va";

심화

간단히만 알아놓자 나중에 String 클래스에 대해서 배울 때 제대로 공부할거임.

  • 왜? 사용하지말아야하나?
    * String은 불변객체 -> 변하지 않는 객체
    처음 name이 참조하고 있는 객체 “Ja”에 “va”를 붙이는 것이 아님
    “Ja”에 대한 참조값을 Name이 버리고 “Java”라는 새로운 객체를 만들어 참조를 연결
    name이 이전에 가르키던 참조값 “Ja”는 GC의 대상이 된다.

  • 그럼 자주 변경될 땐 뭘 사용해야하나? StringBuilder 혹은 StringBuffer 의 append 메소드를 사용하자

변수 선언 및 초기화하는 방법

int a; //선언
a = 10; //초기화
int b = 20; //선언과 동시에 초기화

변수의 스코프와 라이프타임

class ScopeLifeTime{
	static String staticVal = "스태틱변수/클래스변수";
    String globalVal = "전역변수/인스턴스 변수";
    
    public void scopeTest(){
    	String localVal = "지역변수";
        
        System.out.println(staticVal); 
        System.out.println(globalVal);
        System.out.println(localVal);
    }
    
    public void scopeTest2(){
    	System.out.println(staticVal); 
        System.out.println(globalVal);
        System.out.println(localVal);
    }
    
    public static void main(String[] args){
    	System.out.println(staticVal); 
        System.out.println(globalVal);
        System.out.println(localVal);
    }
    
}

타입 변환, 캐스팅 그리고 타입 프로모션

타입변환

  • 캐스팅 : 명시적 형변환
long num = 1L;
int a = (int)num;
  • 타입 프로모션 : 자동 형변환 (좁은 범위의 타입에서 더 큰 범위의 타입으로 변환 시에만 자동)
int num = 1;
long a = num;

1차 및 2차 배열 선언하기

//1차원 배열
int[] array_1 = new int[10]; //1차원 배열 선언과 0 초기값 초기화
int[] array_1 = {1,2,3,4,5}; // 길이가 5인 1차원배열 1,2,3,4,5로 초기화
int[] array_1 = new int[]  {1,3,5,2,4};  // 길이가 5인 1차원 배열 1,3,5,2,4 로 초기화
String[] weeks = {"월","화","수","목","금","토","일"}; //길이가 7인 String배열 선언과 동시 초기화
Student[] students = new Student[10]; // 객체 배열 선언, null값이 들어있음

for(Student s : students){
	s = new Student(); // 이래야 객체 배열의 각 인덱스에 해당하는 오브젝트들이 초기화됨
}

//2차원 배열
int[][] array_2 = new int[10][10]; // 10X10 , [행][열] 순서
int[][] array_2 = new int[][] {{1,2,3}, {4,5,6}};

타입 추론, var

  • Java10 부터 도입
  • 컴파일 타임(javac.exe에 의해 .java가 .class로 바뀌는 타임)에 타입추론 -> 런타임 시 성능문제 없음
  • 지역변수로만 사용 가능 -> 메소드 안에서만 사용하자
  • 초기화를 하지 않으면 타입 추론 불가
class VarCheck{

	public var a = "이건 클래스의 멤버변수"; //컴파일 에러
    
    public void method(){
    	
        var b = "이건 지역변수"; //사용가능
        var arraylist = new ArrayList<String>(); //사용가능, String타입으로 초기화
        var arraylist = new ArrayLIst<>(); //object 타입으로 초기화
        
        //명시적인 타입이 있을 때 반복문 사용
        int[] nums = {1,2,3};
        for(var n : nums){
        	System.out.println(n);
        }
        
        var c; //컴파일 에러 , 초기화 안함
        var d = null; //컴파일 에러 , null로 초기화하면 타입추론 불가
        var arr = {1,2,3}; //컴파일 에러, 배열도 타입추론 불가
        var f = () -> { }; //컴파일 에러, 람다도 사용 불가
    }
}
profile
잡코딩

0개의 댓글