[자바스터디] 5. 자바기초(4)

SooYeon Yeon·2021년 1월 14일
0

2021 자바스터디

목록 보기
5/13
post-thumbnail

2021-java-study

2021 자바 스터디 3주차 과제

자바 기초

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

1.1 프리미티브 타입(원시 타입)

  • 8가지 기본형 타입
  • 기본값이 있기 때문에 Null이 존재하지 않음
  • Null을 넣고싶다면 래퍼클래스 사용
  • 실제 값을 저장하므로 스택 메모리에 저장됨
  • 담을 수 있는 크기를 벗어나면 컴파일 에러 발생
  • 주로 문법상의 에러가 많음
타입설명사이즈값의 범위기본값
byte부호있는정숫값8bit-128 ~ 1270
short부호있는정숫값16bit-32768 ~ 327670
int부호있는정숫값32bit-2147483648 ~ 21474836470
long부호있는정숫값64bit9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,8070
char유니코드 문자16bit0 ~ 65,535'\u0000'
float부동소수점수32bit(3.4 X 10-38) ~ (3.4 X 1038) 의 근사값0.0d
double부동소수점수64bit(1.7 X 10-308) ~ (1.7 X 10308) 의 근사값0.0d
boolean논리값1bitfalse,truefalse

1.2 레퍼런스 타입(참조 타입)

  • 기본형 타입 제외한 타입들이 모두 참조형 타입
  • 빈 객체를 의미하는 Null 존재
  • 값이 저장된 곳의 주소값을 저장하는 공간으로 힙 메모리에 저장됨
  • 문법상으로는 에러가 없지만 실행 시킬때 에러가 나는 런타임 에러가 발생
타입예시할당되는 메모리 크기기본값
배열(Array)int[]arr = new int[5];4byte(객체의주소값)Null
열거(Enumeration)4byte(객체의주소값)Null
클래스(Class)String str = "project";
Fruite apple = new Fruite();
4byte(객체의주소값)Null
인터페이스(Interface)4byte(객체의주소값)Null

2. 리터럴

2.1 리터럴이란

| 프로그램에서 직접 표현한 값

2.2 리터럴의 종류

  • 정수 리터럴
int a = 15;     // 10진수 리터럴
int b = 015;    // 8진수 리터럴 - 0으로 시작 -> 10진수 값으로 13
int c = 0x15;   // 16진수 리터럴 - 0x로 시작 -> 10진수 값으로 21
int d = 0b0101; // 2진수 리터럴 - 0b로 시작 -> 10진수 값으로 5

long 타입 리터럴은 숫자 뒤에 L 또는 l을 붙여 표시
long e = 26L;

  • 실수 리터럴
double f = 0.1234;
double g = 1234E-4; // 1234*10*(-4) 이므로 0.1234와 같다
float,double을 명시적으로 붙이기도 함
(float는 f를 꼭 붙여야하고, double은 생략가능)

float h = 0.1234f;
double i = .1234D;

  • 문자 리터럴
단일 인용부호('')로 문자 표현

char a = 'S';
char b = "사";
char c = \uae00;    //유니코드값, \u다음 4자리 16진수로
  • 문자열 리터럴
기본타입이 아님, ("")로 문자열 표현
String lter = "JAVA";
lter + 26 = "lter26"    //문자열 출력

  • 논리 리터럴
boolean a = true;
boolean b = 10 > 0; //b 값 true
boolean c = 0;  // C와 다르게 boolean타입으로 0,1을 거짓,참으로 사용X
int a = null;   //에러  

String str = null;  
str = "JAVA";  

3. 변수 선언 및 초기화

3.1 변수 선언

| 사용할 데이터를 저장하기 위해 메모리를 잡음

int number; //number 변수선언
double length;  //length 변수선언

3.2 변수 초기화

| 변수를 사용하기 위해 값을 넣어주는 작업으로 초기화해주지 않으면 쓰레기 값이 들어가 에러가 발생할 수 있음

number = 5;
length = 3.4;

3.3 변수 선언 + 초기화

| 변수 선언과 초기화를 동시에 할 수 있음

int number = 5;
int length = 3.4;

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

4.1 변수의 스코프

| 변수의 사용범위를 뜻함

public class Test {

    int var1;
    
    void pro(){
    
        int var2;
    
    
    }

}
  • var1의 스코프는 클래스 전체이다. 즉 pro()메소드에도 사용 가능
  • var2의 스코프는 pro()메소드 안이다. 즉 pro()밖에서는 사용 할 수 없음

4.2 변수의 라이프타임

| 변수가 생성되고 소멸하는 것을 말함

public class Test {

    int var1;   // var1: 인스턴스 변수,필드,전역변수
    static int var2;    // var2: 클래스 변수,정적 변수
    void pro(int var3){ // var3: 매개변수,파라미터
    
        int var4 = 100; //var4: 지역변수,local,변수
   
    }

}
  • var1은 객체가 생성될 때, 변수가 생성됨. 즉, 현재 Test클래스를 main메소드나 다른 클래스에서 인스턴스를 생성할 때 생성
  • 인스턴스는 참조가 없을 때 Garbage Collector가 객체를 지워버리는데, 이때 인스턴스 변수도 같이 소멸
  • var2는 클래스가 처음 호출되면서 생성되고, 자바 어플리케이션이 종료될 때 같이 소멸
  • var3은 pro()메소드가 호출 될 때 var3이 생성되고, pro() 메소드의 종료 시점에 소멸
  • var4는 '{'가 시작될 때 생성되고, '}'가 끝날때 소멸

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

5.1 타입 형변환

| 변수나 상수의 타입을 다른 타입으로 변환

byte < short < int < long < float < double < String

<----정수형 변수----> <-실수형 변수->

5.2 캐스팅

| 명시적 형 변환 - 큰 데이터 타입에서 작은 데이터 타입으로 형 변환

float a = 10;
int b = a;
  • int형 변수에 float형 변수를 넣으면 오류가 발생
float a = 10;
int b = (int) a;
  • 이와 같이 명시적으로 입력을 해줘야 함
  • 값을 출력하면 실수형 10.0이 정수형 10으로 변환 됨


5.3 타입 프로모션

| 자동/묵시적 형 변환 - 작은 데이터 타입에서 큰 데이터 타입으로 형 변환

int a = 10;
float b = a;
  • float형 변수에 int형 데이터를 넣는데, int형 변수는 float형 변수보다 작다고 정의되므로 자동으로 float형 변수로 변환되어 대입
  • 값을 출력하면 정수형 10이 실수형 10.0으로 자동 변환 됨

6. 1차 및 2차 배열 선언

6.1 1차원 배열

| 같은 종류의 데이터를 그룹화 한 형태

int []a = new int[3];   // a는 3칸짜리 배열
int []a = {10,20,30};   // a[0]:10,a[1]:20,a[2]:30
  • 배열의 크기만 정한 후 원소를 대입하지 않으면 초기값이 자동 할당
  1. 숫자형 - 0으로 초기화
  2. boolean형 - false로 초기화
  3. String형 - null로 초기화

6.2 2차원 배열

| 1차원 배열에 행의 개념을 추가한 배열

int[][]arr = new int[2][3]; // 2행 3열
int[][]arr = {{1,2,3},{10,20,30}};

7. 타입 추론, var

| 코드 작성 당시 타입이 정해지지 않았지만, 컴파일러가 그 타입을 유추하는 것

  • Java 10 이상에서 추가됨
  • 지역변수이며 선언과 동시에 초기화가 필수적
//Java 9 이하
String str = "Hello";

//Java 10 이상
var str = "Hello I am SooYeon";
-> 컴파일러가 오른쪽에 초기화 값으로 제공되는 것을 통해 타입 유추

0개의 댓글