Java

class Main {
  public static void main(String[] args) {
  	// new 클래스명().메서드명(); 사용 예시
  	new 자동차().달리다();
    // 클래스명 객체 = new 클래스명(); 사용 예시
    사슴 a사슴 = new 사슴();
    }
}

class 자동차 {
  void 달리다() {
    System.out.println("자동차가 달립니다.");
  }
}

class 사슴 {
  void 달리다() {
    System.out.println("사슴이 달립니다.");
  }
}

Java 형변환 (casting)

  • 변수 또는 상수의 타입을 다른 타입으로 변환하는 것

자동 형변환(묵시적 형변환)

  • 작은 크기의 데이터 타입을 큰 크기의 데이터 타입으로 자동으로 변환하는 것

자동 형변환의 조건

기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환한다.

강제 형변환(명시적 형변환)

  • 강제 형변환을 사용할 때에는 데이터 손실이 발생할 수 있으므로, 변환하려는 데이터의 타입을 반드시 확인하고 변환을 수행해야 합니다.
// 자동 형변환 가능
int intNumber = 10;
double doubleNumber = intNumber;

// 자동 형변환 불가능
double doubleNumber = 5.5;
int intNumber = doubleNumber;

이럴때 강제형변환 필요
int intNumber = (int) doubleNumber;

TDD (Test Driven Development)

  • 테스트를 우선시하며, 개발자는 코드를 작성하기 전에 테스트 케이스를 작성합니다

  • 코드의 품질을 향상시키고 버그를 줄이는 등의 장점이 있습니다.

  • 작성하는 과정에서 코드 요구사항을 명확히 파악하고, 코드 작성 전에 예상되는 문제점을 미리 파악할 수 있어 개발 생산성을 높일 수 있습니다.

  • TDD 주요 흐름

    * RED : 실패하는 테스트 코드 만들기
    * GREEN : 만든 테스트 코드가 통과하도록 코드 짜기 (최소한의 코드)
    * BLUE : RED, GREEN 반복후 리팩토링 (기능 추가 금지)

static

  • static 메서드에서는 오직 static 메서드나 static 변수에만 접근이 가능하다.
  • 클래스에서 생성한 객체들과는 별개로, 클래스 자체에 속한 멤버를 정의할 수 있습니다.
  • 메모리에 하나만 존재 : static 멤버는 해당 클래스의 모든 객체가 공유하므로, 메모리에 하나만 존재합니다.
  • 인스턴스 변수에 접근 불가 : static 멤버는 객체 생성 이전에도 사용 가능하기 때문에, static 멤버에서는 인스턴스 변수에 직접 접근할 수 없습니다.
class Main {
    public static void main(String[] args) {
    	// 클래스명.메서드() 사용가능
        자동차.달리다();
    }
}

class 자동차 {
     static void 달리다() {
        System.out.println("자동차가 달립니다.");
    }
}
class Main {
    public static void main(String[] args) {
    	// 클래스명.메서드() 사용 불가능
        // 인스턴스(객체)화 해야 사공가능
        자동차.달리다();   // 작동 불가
        자동자 페라리 = new 자동차();
        페라리.달리다()    // 작동 가능
    }
}

class 자동차 {
     void 달리다() {
        System.out.println("자동차가 달립니다.");
    }
}

상속

  • 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것
  • 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다.
  • 단일 상속원칙 2개 이상의 클래스를 상속은 불가능하다.
// 불가능
class Kia extends Car, Korea{
}
  • 새로운 클래스에서는 기존 클래스의 기능을 수정하거나 확장할 수 있습니다.(오버라이드)
class Car {
	void run() {
    	System.out.println("Car is run");
    }
}

class Kia extends Car{
}

// 사용가능
Kia ray = new Kia();
ray.run(); // "Car is run"

오버라이드(Override)

  • 상위 클래스에서 정의된 메서드를 하위 클래스에서 재정의하는 것
  • 오버라이드를 사용하면 하위 클래스에서 상위 클래스의 동작을 덮어쓰고 새로운 동작을 구현할 수 있습니다.

오버라이드 조건

상위 클래스의 메서드와
- 메소드명이 같아야 한다.
- 매개변수가 같아야 한다.
- 반환타입이 같아야 한다.
// 오버라이드 사용 예시
class Car {
	void run() {
    	System.out.println("Car is run");
    }
}

// 벤츠는 달릴때 달랐으면 좋겠다
class Benz extends Car{
	void run() {
    	System.out.println("Benz is fast");
    }
}

Benz g63_AMG = new Benz();
g63_AMG.run(); // "Benz is fast"

런타임 에러(Runtime Error)

  • 자바 런타임 에러(Runtime Error)는 프로그램이 실행중에 발생하는 오류로서, 예외(Exception)와 에러(Error)로 구분된다.
  • 런타임 에러가 발생하면 프로그램이 예외 처리를 해주어야 합니다. 이를 통해 프로그램이 비정상적으로 종료되는 것을 방지하고, 에러 메시지를 출력하여 원인을 파악할 수 있습니다.

컴파일 에러(Compile Error)

  • 컴파일 에러(Compile Error)는 소스 코드를 컴파일하는 과정에서 발생하는 오류
  • 문법 오류나 타입 오류 등을 발견하면 컴파일 에러가 발생

0개의 댓글