도토리 줍는 개발자 감자
Kotlin 코틀린 변수타입 (기본기) - jimoo 본문
1. Kotlin 변수 타입 종류
코틀린에서 모든것은 어떤 변수에 대해서 member function과 properties를 호출할 수 있다는 점에서 object 이다. 예를 들어 숫자, 문자, 불리언은 런타임 시 primitive value(데이터 값, 원시 값)으로 표현될 수 있지만, 코드를 짜는 개발자들이 봤을 때는 클래스처럼 보인다.
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는 모두 Number Class의 자식인 것을 볼 수 있다.
(추상클래스 Number는 기본 유형 byte, double, float, int, long, short 로 변환할 수 있는 숫자 값을 나타내는 플랫폼 클래스의 super 클래스입니다. <--API 문서 설명에 나와있음)
Number Class에는 인스턴스를 기본자료형타입으로 변환하는 메소드들이 정의되어 있습니다.
intValue() 는 Integer 객체가 있을때 Integer 객체에 .intValue() 를 적용하면 int 형으로 전환해줍니다.
(객체에서 값만 뽑아냈다는 의미)
그리고 각 Wrapper Class들은 위의 추상 메소스들을 물려받아 각 인스턴스에 맞게 함수를 구현해놓았습니다.
Kotlin 의 Number은 java와 달리 추상메소드에 toChar()이 추가된 점이 다릅니다.
그리고 Kotlin은 객체->기본타입 으로 변경시켜주는 것이 아니고 객체->객체로 변경시켜줍니다.
아래의 코드를 보면 Byte 형을 -> Int 형으로 변경시킨 것을 볼 수 있습니다.
2. 변수 타입 확인 방법 (type)
- java의 " 변수명.getClass().getName() " 와 동일한 기능이다.
변수명.javaClass
변수명.javaClass.name
'코틀린(Kotlin)공부' 카테고리의 다른 글
Kotlin 코틀린 Any란? - jimoo (0) | 2021.10.22 |
---|---|
Kotlin 코틀린 Arrays 배열 (기본기) - jimoo (0) | 2021.10.06 |
Kotlin 코틀린 변수선언 (기본기) - jimoo (0) | 2021.09.26 |
Kotlin 시작 IntelliJ 다운로드 mac - jimoo (0) | 2021.09.23 |