-
온도 표현단위와 변환 방법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