형변환(type conversion)

  • 묵시적 형변환 : (컴파일러) 자동 변환
    • double num1 = 10
    • System.out.print(num1) // 10.0
  • 명시적 형변환(type casting) : 캐스트 연산자(괄호) 사용
    • int result = 1 / 4; // int(0.25) = 0
    • System.out.print(double(result)) // 0.0

 

삼항 연산자(ternary operator)

  • true : 반환값1
  • false : 반환값2
조건식 ? 반환값1 : 반환값2

 

 

루프와 제어

  • continue : 루프 내에서 사용하여 해당 루프의 나머지 부분은 건너 뛰고, 바로 다음의 조건식으로 넘어가게 해준다.
  • break : 루프 내에서 해당 반복문을 완전 종료

 

static 제어자

  • 해당 변수를 클래스 변수로 만들어준다.
  • 메소드에 사용하면 해당 메소드를 클래스 메소드로 만들어준다.
  • 초기화 블록에도 사용 가능
  • 프로그램 시작 시 최초에 한 번 생성만 되고 초기화된다.
  • 인스턴스를 생성하지 않아도 바로 사용 가능
  • 해당 클래스의 모든 인스턴스가 공유

 

클래스의 필드(field)

  • 필드 : 클래스에 포함된 변수(variable)
  • 선언 위치에 따라 구분된다.
  • 1. 클래스 변수(static variable) : 클래스 영역에서 static 키워드를 가지는 변수
    • 해당 클래스의 모든 인스턴스가 공유해야 하는 값을 유지하기 위해 사용
  • 2. 인스턴스 변수(instance variable) : static 키워드를 가지지 않은 변수
    • 인스턴스마다 가져야하는 고유의 값을 유지하기 위해 사용
  • 3. 지역 변수(local variable) : 메소드나 생성자, 초기화 블록 내에 위치한 변수
  • 클래스 변수 + 인스턴스 변수 : 컴파일러가 자동으로 초기화
  • 지역 변수는 초기화하지 않으면 오류 발생
  • 필드의 초기화 
    • 1. 명시적 초기화 : 필드 선언과 동시에 초기화
    • 2. 생성자를 이용한 초기화 : 객체 생성과 동시에 필드 초기화
      • 인스턴스 생성 전까지 필드 초기화 불가능
    • 3. 초기화 블록을 이용한 초기화 (초기화 블록 : main 메소드 호출 이전에 실행)
      • 초기화 블록은 생성자 보다 먼저 호출
      • 1. 인스턴스 초기화 블록 : 생성자와 거의 차이 없어서 잘 사용 X
      • 2. 클래스 초기화 블록 : 처음 메모리에 로딩될 때 단 한 번만 실행 
        • 필드의 초기화 순서
        • 클래스 변수 : 기본값 -> 명시적 초기화 -> 클래스 초기화 블록
        • 인스턴스 변수 : 기본값 -> 명시적 초기화 -> 인스턴스 초기화 블록 -> 생성자
class Car {
    static int modelOutput; // 클래스 변수
    String modelName;       // 인스턴스 변수
 
    void method() {
        int something = 10; // 지역 변수
    }
}
변수 생성 시기 소멸 시기 저장 메모리 사용 방법
클래스 변수 클래스가 메모리에 올라갈 때 프로그램 종료 메소드 영역 클래스 이름.변수이름
인스턴스 변수 인스턴스가 생성될 때 인스턴스 소멸 힙 영역 인스턴스이름.변수이름
지역 변수 블록 내에서 변수 선언문이 실행될 때 블록을 벗어날 때 스택 영역 변수이름
public class MyClass {
    // field
    int aaa;
    static int bbb = staticCall();

    // default constructor : class 확장성과 관계성이 있음.
    public MyClass(){

    }

    // static block
    static {
        // main이 실행되기 직전에 다른 library 같은 것들을 loading할 필요가 있을 때 사용한다.
        System.out.println("static block");
    }

    static int staticCall(){
        System.out.println("호출되었어요!");
        return 100;
    }

    public static void main(String[] args){
        System.out.println("main 호출");
    }
}

 

 

클래스 메소드와 인스턴스 메소드

  • 1. 클래스 메소드(static method) : static 키워드를 가지는 메소드
    • 인스턴스를 생성하지 않아도 바로 사용 가능
    • 메소드 내부에서 인스턴스 변수를 사용할 수 없다.
  • 2. 인스턴스 메소드(instance method) : static 키워드가 없는 메소드
class Method {
    int a = 10, b = 20;                            // 인스턴스 변수
    int add() { return a + b; }                    // 인스턴스 메소드

    static int add(int x, int y) { return x + y; } // 클래스 메소드
}
 
public class Member02 {
    public static void main(String[] args) {
        System.out.println(Method.add(20, 30)); // 클래스 메소드의 호출
        Method myMethod = new Method();         // 인스턴스 생성
        System.out.println(myMethod.add());     // 인스턴스 메소드의 호출
    }
}

ouput 
50
30

this와 this()

  • this : 현재 사용하는 객체의 reference (자기자신 참조)
    • 생성자의 매개변수 이름과 인스턴스 변수를 구분하기 위해 사용한다.
    • this를 사용해서 인스턴스 변수에 접근한다.
  • this() : 자신의 클래스가 가지고 있는 다른 생성자 호출 
    • 생성자 내부에서만 사용 가능
class Car {
    private String modelName;
    private int modelYear;
    private String color;
    private int maxSpeed;
    private int currentSpeed;
 
    Car(String modelName, int modelYear, String color, int maxSpeed) {
        this.modelName = modelName;
        this.modelYear = modelYear;
        this.color = color;
        this.maxSpeed = maxSpeed;
        this.currentSpeed = 0;
    }
    ...
}
    Car() {
        this("소나타", 2012, "검정색", 160); // 다른 생성자를 호출함.
    }

+ Recent posts