형변환(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); // 다른 생성자를 호출함.
}
'프로그래밍 > JAVA' 카테고리의 다른 글
[Java] 클래스, 상속, 동적 바인딩, 추상 메소드, 인터페이스, super (1) | 2022.10.03 |
---|---|
[Java] 상수(constant), final, String 생성방식(StringBuffer, StringBuilder) (1) | 2022.10.03 |
[Java] 자바 프로그램 실행 과정, JVM, 가비지 컬렉터(GC) (2) | 2022.10.03 |
[Java] 자바 - call by value & reference, 자바 특징, Java 8, primitive &reference type (1) | 2022.10.03 |
[Java] 접근 제어자, 래퍼 클래스, 제너릭, 컬렉션, 스트림, 람다식, Optional (0) | 2022.10.02 |