도토리 줍는 개발자 김지무

Kotlin 코틀린 변수타입 (기본기) - jimoo 본문

코틀린(Kotlin)공부

Kotlin 코틀린 변수타입 (기본기) - jimoo

지무 2021. 9. 28. 19:02
728x90
반응형

1. Kotlin 변수 타입 종류

코틀린에서 모든것은 어떤 변수에 대해서 member function과 properties를 호출할 수 있다는 점에서 object 이다. 예를 들어 숫자, 문자, 불리언은 런타임 시 primitive value(데이터 값, 원시 값)으로 표현될 수 있지만, 코드를 짜는 개발자들이 봤을 때는 클래스처럼 보인다.

 

https://kotlinlang.org/docs/basic-types.html

 

1.1 문자 변수

- String : 문자열 데이터 (ex: "jimoo", "apple")

  String은 변수를 입력할 때 큰따옴표 안에 작성해주면된다.

 

- Char : 단일 문자 데이터(ex: 'C', 'B')

  Char은 변수를 입력할 때 큰따옴표가 아닌 작은따옴표안에 작성해주면된다. (큰따옴표에 작성할 시 오류)

문자 변수 선언 예시

1.2 숫자 변수

- Int: 정수형을 작성해주면된다. (0,1,2...) 그리고 1.0 등 소수를 입력하면 오류가 발생한다.

- Long: 변수를 선언할 때 접미사로 L을 요구한다. L을 작성하지 않으면 오류가 발생한다.

- Float: 변수를 선언할 때 접미사로 F을 요구한다. F을 작성하지 않으면 오류가 발생한다.

- Short

fun main() {
    var n :Number = 10.00
    var n1 :Number = 10
    var n2 :Int = 123
    var n3 :Long = 123L
    var n4 :Float = 10.0F
    var n5 :Short = 16
}

- Number : 숫자를 표현하는 모든 자료형에 사용가능하다.(자동으로 Byte, Short, Int, Long 타입추론)

fun main() {
    var n :Number = 10.0
    var n1 :Number = 10
}

  Kotlin의 Number은 Java의 Number와 같은 개념입니다.

java.lang.Number(https://docs.oracle.com/javase/8/docs/api/java/lang/Number.html) 에 들어가면 설명을 볼 수 있는데 무슨말인지 잘 이해가 안갈것이다.(난 그랬다....) Number에 대해 설명을 해주겠음!!!!

  일단 Java의 Wrapper Class를 알아야한다. Wapper은 기본자료형(primitive type)을 객체형태로 다루기 위해 인스턴스화 하는 클래스이다. 

  - 기본자료형: boolean, char, byte, short, int, long, float, double

  - 인스턴스형: Boolean, Character, Byte, Short, Integer, Long, Float, Double

 인스턴스화란 객체를 만들고 new 생성자를 사용하여 메모리를 할당하는 과정이 인스턴스화입니다. 예를 들어 Fruit라는 클래스가 있을 때 Fruit apple; 은 객체를 생성하는 코드이고 apple = new Fruit(); 를 통해 메모리를 할당하는 과정이 인스턴스화를 하는 과정입니다. 즉, Wrapper은 기본 자료형을 Wrapper 클래스로 만들어주면서 인스턴스화 하는 것이다. 

아래는 Wrapper 클래스를 사용한 Java코드 예시이다. 

Integer n = new Integer(7);
Double n1 = new Double(5.5);

 그러면 언제 Wrapper Class를 사용하는지 궁금할것이다. 가끔씩 Object를 파라미터로 받는 메소드가 있을 수 있습니다. 아래 Java코드 예시의 countFruit 메소드는 과일이 몇 개 있는지 출력해주는 함수입니다. 그런데 함수의 파라미터가 Object 형으로 지정되어 있기 때문에  int apple = 5; 로 만든 변수는 파라미터 값으로 들어갈 수 없다. 이런 경우에 Wrapper Class가 사용되는 것이다. 

public class Fruit{
	static void countFruit(Object obj){
    	System.out.println(obj);
	}
	public static void main(String args[]) {
		Integer apple = new Integer(5);
		Fruit.fountFruit(apple);
	}
}

//=> 출력: 5

 Wrapper Class에 대해 알아봤으니 이제 Java의 Number Class에 대해 알아보자!

abstract class(추상클래스) Number는 Wrapper Class의 Supper Class이다. 즉 Number class는 추상클래스로서 Wrapper 클래스에 공통된 기능들을 제공하기 위한 클래스입니다. (Boolean과 Character을 제외한 "Byte, Short, Integer, Long, Float, Double" Wrapper Class만 Number 클래스를 상속합니다. 

Wrapper Class 구조

위의 구조도를 보면 숫자에 해당하는 Wrapper Class는 모두 Number Class의 자식인 것을 볼 수 있다. 

(추상클래스 Number는 기본 유형 byte, double, float, int, long, short 로 변환할 수 있는 숫자 값을 나타내는 플랫폼 클래스의 super 클래스입니다. <--API 문서 설명에 나와있음)

 Number Class에는 인스턴스를 기본자료형타입으로 변환하는 메소드들이 정의되어 있습니다. 

intValue() 는 Integer 객체가 있을때 Integer 객체에 .intValue() 를 적용하면 int 형으로 전환해줍니다.

(객체에서 값만 뽑아냈다는 의미)

JAVA Number Class에 정의된 메소드

그리고 각 Wrapper Class들은 위의 추상 메소스들을 물려받아 각 인스턴스에 맞게 함수를 구현해놓았습니다. 

 

Kotlin 의 Number은 java와 달리 추상메소드에 toChar()이 추가된 점이 다릅니다.

그리고 Kotlin은 객체->기본타입 으로 변경시켜주는 것이 아니고 객체->객체로 변경시켜줍니다.

아래의 코드를 보면 Byte 형을 -> Int 형으로 변경시킨 것을 볼 수 있습니다.

Kotlin Number method

2. 변수 타입 확인 방법 (type) 

- java의 " 변수명.getClass().getName() " 와 동일한 기능이다.

변수명.javaClass
변수명.javaClass.name

 

 

728x90
반응형
Comments