ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 온도 표현단위와 변환 방법
    Swift 2021. 1. 19. 19:55

    안녕하세요. 그린입니다!

    이번 포스팅에서는 온도 표현단위와 해당 단위들끼리 Swift에서 변환해보는 방법에 대해 알아보겠습니다😄

     

    1. 온도의 표현단위

    : 일단 온도를 나타내는 표현으로는 섭씨/화씨/켈빈 세가지로 있다.

      섭씨와 화씨온도는 1기압에서 물의 끓는/어는 온도를 기준으로 정하여 사이를 등분한 온도 체계이다.

     

     1) 섭씨: °C 우리가 흔히 사용하는 온도 체계로 처음 제안한 천문학자인 안데르스 셀시우스의 이름을 중국어 발음으로섭이사라고 하는데
                     
    앞글자인 존칭인 붙여섭씨온도 불리게 되었다.

     2) 화씨: °F 물리학자인 다니엘 가브리엘 파렌하이트가 제안을 했으며 어는 온도를 32°F, 끓는 온도를 212°F 정하였고 사이를
                  180
    등분했다. 섭씨처럼 명칭은 동일하게 파렌하이트의 한자음인화륜해 붙여화씨온도 불리게 되었다.

     3) 켈빈: 절대온도 불리며 분자의 운동성을 가지고 수치로 나타낸 온도로 K 표현된다. 분자가 멈춰있는 이론상 최저온도는 0K이다.
                  (
    그러나 우주 어디에도 0K 가진 물질은 없다)

     

    해당 온도 표현단위 외에도 란씨/열씨/드릴도/뉴턴도/뢰머도 등이 있지만 대표적으로 쓰는 3가지 표현단위에 대해서만 학습하였다.

     

    2. 온도의 변환

    :섭씨는 100등분을 하고 화씨는 180등분을 하니 해당 등분에 대해 계산해준 어는 온도를 섭씨는 0 화씨는 32 정했기에 차이만큼
     빼거나 더해줌으로 변환을 해준다

     켈빈을 변환할때는 0K /화씨 온도로 표현할때 나오는 수치를 더하거나 빼주면된다.

     

     1) 섭씨 -> 화씨

     : °F = °C * 1.8 + 32

     2) 화씨 -> 섭씨

     : °C = (°F - 32) / 1.8

     3) 섭씨 -> 켈빈

     : K = °C + 273.15

     4) 켈빈 -> 섭씨

     : °C = K - 273.15

     

    3. Swift에서 변환하는 방법

     1) 계산식을 통해 변환하는 방법

     : 위의 변환 수치에 따른 계산식을 통해 변수를 정해주고 계산을 통해 변환하는 일차원적인 방법

     2) 애플에서 제공하는 클래스 메서드 사용

     : 개발자 문서에 보면 UnitTemperature라는 온도 단위를 타입으로 표현해줄 있는 클래스가 있다.

    class UnitTemperature: Dimension

     

    -. 해당 클래스는 celsius/fahrenheit/kelvin 세가지의 온도 표현 단위를 연산 프로퍼티로 정의하여 두었다.

     

    이에 우리는 온도라고 생성한 변수를 세가지 온도 표현 단위중 어떤것으로 정할지는 해당 클래스의 프로퍼티를 지정해주기만 하면된다.

    let celsius = UnitTemperature.celsius
    let fahrenheit = UnitTemperature.fahrenheit
    let kelvin = UnitTemperature.kelvin

     

    조금 깊게 들어가 해당 클래스는 Dimension이라는 클래스를 상속받는데 Dimension 클래스는 치수 단위를 나타내는 추상 클래스다.

    , 면적,질량,기간,전류,전하,주파수,에너지 일반적인 물리적 단위를 측정하는 클래스들을 하위 클래스로 제공한다.
    UnitTemperature 있는것이다.

     

    이제 변환하는 방법을 보면, 우선 UnitTemperature 기본 온도 표현 단위는 켈빈(절대온도)이다. 

    변환할때는 converter 메서드를 활용한다.

    let celsius = UnitTemperature.celsius.converter.value(fromBaseUnitValue: kelvin)

     

    converter 메서드는 아래와 같이 UnitConverter 클래스의 기능을 복사하였다.

    @NSCopying var converter: UnitConverter { get }

    여기서 @NSCopying 개체가 자신의 기능을 복사하여 제공하도록 채택할때 사용하는 프로토콜이다.

    , converter UnitConverter 클래스의 기능을 그대로 복사되어 사용하는 변수를 의미한다.

     

    UnitConverter 클래스를 보면,

    class UnitConverter : NSObject

     

    선언이 되어있으며, Dimension 기본 단위간에 단위를 변환하는 기능을 제공해주는 추상 클래스이다.

     

    단위 변환을 해주는 메서드로는 아래와 같이 2가지를 가지고 있다. 만약 상속을 받는 하위 클래스가 있다면 아래 메서드를 완전히 구현해야한다.

    func baseUnitValue(fromValue: Double) -> Double

    : 주어진 단위에 대해 해당 측정의 기본 단위를 기준으로 변환된 값을 리턴하는 메서드

    func value(fromBaseUnitValue: Double) -> Double

     

    : 주어진 단위에 대해 기본 단위의 변환된 값을 리턴해주는 메서드

     

    사실 아직도 두가지 메서드의 명확한 차이? 고민중이다. 이해하기로는 위의 메서드는 어떤 값을 주면 표현단위에 기준이 되는 단위로 변환해주는것이고 아래 메서드는 기준이 되는 값을 주어 원하는 단위로 변환하는 메서드라고 생각한다.

     

    이걸 이해하고 JSON으로 받아온 절대온도 정보를 연산 프로퍼티를 사용하여 섭씨온도로 변경해줄 수 있다.

    let temp: Doublevar 
    celsiusTemp: Double {        
    	return UnitTemperature.celsius.converter.value(fromBaseUnitValue: self.temp)    
    }

     

    이렇게 간단하게? 조금 포괄적이지만 나름 세부적으로 온도 표현단위와 Swift에서 변환 방법에 대해 학습해보았습니다.

    날씨 애플리케이션등 많은 부분에서 활용이 될 수 있음으로 기억하고 있으면 좋겠습니다!

    감사합니다 :D

     

    [참고자료]

    https://developer.apple.com/documentation/foundation/unittemperature

    https://developer.apple.com/documentation/foundation/dimension

    https://developer.apple.com/documentation/foundation/unitconverter

    https://developer.apple.com/documentation/foundation/unitconverter/1823657-value

    https://ko.wikipedia.org/wiki/섭씨

     

    'Swift' 카테고리의 다른 글

    Protocol Oriented Programming  (0) 2021.01.28
    타입 메서드  (0) 2021.01.27
    CFAbsolute TimeGetCurrent  (0) 2021.01.15
    메모리 구조 & ARC  (0) 2021.01.11
    Concurrent Programming  (0) 2021.01.07
Designed by Tistory.