풀스택 자바 - 20240802

김진아·2024년 8월 2일

형변환


  • 데이터 타입을 변환하는 과정
  • 메모리 크기가 같거나 더 크게 할당된 타입으로 변환되면 자동 형변환
    메모리 크기가 작은 타입으로 변환되면 명시적(강제) 형변환



자동 형변환(Implicit Casting)

  • 자동으로 타입을 변환시켜줌
  • 메모리 손실이 없을 때 사용
  • 주로 작은 타입에서 큰 타입으로의 변환이 이루어짐
  • ex) 'int'에서 'double'로 형변환
    : 'int'는 'double'에 비해 메모리 할당이 적게 되므로, 변환 시 데이터 손실이 없어 자동적으로 변환이 이루어진다.

명시적 형변환(Explicit Casting)

  • 강제로 형변환을 진행하는 과정
  • 메모리 손실이 일어날 수 있음
  • 주로 큰 타입에서 작은 타입으로의 변환이 이루어짐
  • ex) 'double'을 'int'로 형변환
    : 'double'은 'int'에 비해 메모리 할당이 많게 되어서 변환 시 데이터 손실이 생기므로, 명시적으로 형변환을 시켜주어야 한다.

변수의 형변환

자동 형변환

	int i = 10;
    double d = i;
    System.out.println(d); //출력: 10.0

명시적 형변환

	double d = 5.5;
    int i = (int) i;
    System.out.println(i); //출력: 5

객체의 형변환

  • 자바에서는 상속 관계에 있는 클래스들 간에 형변환이 가능
  • 아래의 클래스가 있다고 할 때의 업캐스팅과 다운캐스팅을 살펴보자.

    class 무기 {
    	void 공격() {
        	System.out.println("무기로 공격!")
        }
    }
    classextends 무기 {
    	void 공격() {
        	System.out.println("칼로 공격!");
        }
    }

업캐스팅

  • 자식 클래스의 객체를 부모 클래스 타입으로 변환하는 것
  • 자동 형변환이 적용된다.
    public class Main {
    	public static void main(String[] args) {
     		무기 a무기 = new();  // 업캐스팅
            a무기.공격();   //출력: "칼로 공격!"
        }
    }
  • 이때 a무기는 클래스 '칼'이므로, 공격();은 '칼'안에 있는 메소드로 실행된다.

다운캐스팅

  • 부모 클래스의 객체를 자식 클래스 타입으로 변환하는 것
  • 수동 형변환을 적용해야 한다.
    public class Main {
    	public static void main(String[] args) {
			칼 a무기 = ()new 무기();  // 다운캐스팅
			a무기.공격();   //출력: "무기로 공격!"
        }
    }
  • 이때 a무기는 클래스 '무기'이므로, 공격();은 '무기'안에 있는 메소드로 실행된다.
profile
https://develop-chick.tistory.com/ 첫번째 블로그

0개의 댓글