Java/문법

[JAVA 중급 스터디 - 1회차] 기본형/참조형, Wrapper Class생성자, 패키지

soowitty 2024. 3. 8. 16:19

자바 중요 문법 빠르게 반복하는 스터디를 진행하게 됐다!! 👩‍💻

너무 감사하게도 팀장님이 자료 공유 + 강의까지 해주신다구 하셔서 이제 내가 해야할 건 열심히 공부하는 것 뿐 👽

기본 개념 다지기

기본형과 참조형

기본형 - Primitive Type

  • boolean, char, byte, short, int, long, float, double
  • 기본형 변수로, 실제로 직접 사용할 수 있는 값이다. (실제 값이 저장됨)
  • null값이 존재하지 않는다.
    • 기본값이 정해져 있기 때문!
      primitive type 기본값
      boolean false
      char '\u0000'
      byte 0
      short 0
      int 0
      long 0L
      float 0.0F
      double 0.0

❓ primitive type에 null값, 아예 불가능할까?

  • 아니다.
  • Wrapper 클래스를 이용하면 null값을 넣는 것이 가능은 하다.

참조형 - Reference Type

  • 기본형을 제외한 나머지 (String, Class, Interface, Enum, Array, Map, Set 등)
  • 참조형 변수로, 객체의 참조값이 저장된다. (자료가 저장된 공간의 주소를 저장)
    • 실제 값은 다른 곳에 있고, 해당 위치의 주소만을 가지고 있음. 주소를 참조하여 값을 가져옴.
  • null값으로 초기화가 가능하다.

기본형 vs. 참조형

  • 기본형이 참조형에 비해 접근 속도가 훨씬 빠르고, 메모리 양도 훨씬 적게 사용한다.

기본형과 참조형의 저장공간

  • 기본형
    • 스택(stack) 에 기본형 변수가 저장됨
    • 해당 변수 안에 실제 값이 저장됨
  • 참조형
    • 스택(stack) 에 참조형 변수가 저장됨
    • 해당 변수 안에 실제 객체의 주소값이 할당됨
    • 힙(heap) 에 실제 객체가 저장됨int(기본형) vs. Integer(참조형)
  • int : 기본형
    • null 값 불가능
    • 따로 직접 함수 적용 불가능
  • Integer : Wrapper 클래스
    • null 값 가능
    • Integer 클래스에 정의된 함수 적용 가능
      • ex) 2진수 변환 함수 - tobinaryString

Wrapper Class

  • 기본형을 객체로 다루기 위해 사용하는 클래스
  • 값을 포장하여 객체로 만드는 것
  • java.lang 패키지에 포함됨
  • 각 타입에 해당하는 데이터를 파라미터로 전달받아 해당 값을 가지는 객체로 만들어줌

필요한 경우

  • null 값을 표현해야 할 때
  • Collection Frame Work를 사용해야할 때
    • 객체만 저장이 가능하기 때문
  • 매개변수로 객체를 필요로 하는 상황
  • 기본형 값이 아닌 객체로 저장 or 사용해야하는 상황

Boxing & UnBoxing

  • Boxing(박싱) : primate type → Wrapper Class
  • UnBoxing(언박싱) : Wrapper Class → Primate type

AutoBoxing & AutoUnBoxing

jdk 1.5 부터는 자바 컴파일러가 자동으로 박싱, 언박싱을 해준다.

/* 기존 박싱 & 언박싱 */
Integer num = new Integer(17); // 박싱
int n = num.intValue();        // 언박싱

/* 오토 박싱 & 언박싱 */
Integer num = 17; // new Integer() 생략
int n = num; // intValue() 생략
  • new 키워드 없이도 자동으로 인스턴스를 생성할 수 있고, UnBoxing 메소드를 사용하지 않아도 자동언박싱을 통해 인스턴스에 저장된 값을 바로 참조할 수 있다.

==  vs. .equals() vs. .compareTo()

  • ==
    • 참조 비교, 즉 주소값을 비교한다.
      • 같은 메모리 공간을 가리키는지 확인한다.
    • 기본형, 객체 타입에 적용 가능
    • 반환 타입 : boolean
  • .equals()
    • 내용 비교
      • 내부값을 비교한다.
      • 문자열의 데이터/내용을 기반으로 비교
    • 기본형에 적용 불가능, 객체 타입에 적용 가능
    • 반환 타입 : boolean
  • .compareTo()
    • 기본형에 적용 불가능
    • 반환 타입 : Integer

래퍼클래스 끼리의 비교

  • == : 주소값 비교
  • equals() : 내부값 비교
  • 래퍼클래스와 기본형의 비교*

== : 내부값 비교

  • equals() : 내부값 비교

 

생성자

기본 생성자

  • 매개변수가 없는 생성자
  • 자바의 모든 클래스에는 하나 이상의 생성자가 정의되어 있어야 한다.
    • if 클래스에 생성자가 하나도 없다면,
      -> 자바 컴파일러가 기본 생성자를 자동으로 만들어줌
    • if 생성자가 하나라도 있으면,
      -> 자바는 기본 생성자를 만들지 않는다.

생성자 오버로딩

  • 생성자는 매개변수만 달리하여 여러 생성자를 제공할 수 있다. (like 메서드 오버로딩!)
  • 생성자를 오버로딩할 때, this()를 이용한다.

this. vs. this()

this.

  • 인스턴스자신을 가리키는 참조변수를 의미한다.
  • (생성자의 매개변수로 선언된 변수의 이름) == (인스턴스 변수) 일 때, 두 변수의 구분을 위해 사용

this()

  • 생성자 를 의미한다.
  • 규칙
    • 생성자 내부에서만 사용 가능
    • 생성자 내부 중에서도 첫 줄에서만 사용 가능
class Car{
    String color; // 인스턴스 변수
        String gearType;
        int door; 

    //this. 사용
    Car(String color, String gearType, int door){
            this.color = color; 
            this.gearType = gearType;
            this.door = door;
    }

    //this() 사용
        Car(){
            this("white", "auto", 4);
        }

    //this() 사용
    Car(String color){
            this(color, "auto", 4);
        }
}

패키지

import 클래스

  • java.lang 패키지의 모든 클래스는 import 없이 사용 가능
  • 클래스는 public이어야만 import가 가능하다.

클래스는 접근 제한자로 public과 default만 사용 가능하다.

패키지는 다르지만 클래스 이름이 같은 경우

  • 클래스 이름이 동일하더라도, 패키지가 다르면 다른 클래스임!
  • 같은 이름의 클래스가 있다면, import는 그중에 하나만 선택할 수 있다.
    • 나머지 클래스는 패키지를 포함한 전체 경로를 적어주어야 한다.

패키지 이름 관례

  • 모두 소문자로 사용한다.
  • 이름의 앞 부분에는 일반적으로 회사의 도메인 이름을 거꾸로 사용한다.
    • ex) com.company.myapp

Reference