first class citizen

Gooreum·2021년 10월 28일
0

Swift

목록 보기
7/16

1급 객가 되는 조건

  • 스위프트 함수는 1급 객체이다.
  • 다음 조건을 충족하는 객체를 1급 객체라고 한다.
    • 변수에 저장할 수 있다.
    • 매개변수로 전달할 수 있다.
    • 리턴값으로 사용할 수 있다.

함수를 매개변수와 리턴값으로 사용

  • 스위프트는 함수를 데이터 타입처럼 처리할 수 있음.
    • 다음과 같이 함수를 상수 또는 변수에 할당하는 것이 가능.

      func inchesToFeet(inches: Float) -> Float {
      	return inches * 0.0833333
      }
      
      //1
      let toFeet = inchesToFeet
    1. 함수를 자료형처럼 사용가능하다.
    • 함수를 호출하려면 원래의 함수 이름 대신에 상수 이름을 이용하여 호출 가능하다.

      //1
      var result = toFeet(10) 
    1. inchessToFeet(inches: 10)과 동일함.
    • 어떤 함수에 다른 함수를 인자로 넘겨주거나 함수의 반환 값으로 함수를 넘겨줄 수 있다.

      • 스위프트 함수는 1급 객체(first citizen object) 또는 1급 시민(first class citizen)
    • 위 함수는 Float형 매개변수, Float형 결과를 반환하기 때문에 함수의 데이터 타입(자료형)

      (Float)Float // (매개변수형) → 리턴형
    • Int와 Double형을 매개변수로 받아서 String을 반환하는 함수의 데이터 타입도 가능.

      (Int, Double) -> String //(매개변수형, 매개변수형) -> 리턴형
    • 매개변수로 함수를 받으면, 함수를 받게 될 함수는 함수의 데이터 타입을 선언함.

      func addTwoInteger(x: Int, y: Int) -> Int { 
      	return (x+y)
      }
    • swift 함수는 1급 객체이므로 변수에 저장할 수 있다.

      func inchesToFeet(inches: Float) -> Float {
      	return inches * 0.0833333
      }
      func inchesToYards(inches: Float) -> Float {
      	return inches * 0.0277778
      }
      
      //위 함수를 매개변수에 저장
      let toFeet = inchesToFeet
      let toYards = inchesToYards
      
    • swift 함수는 1급 객체이므로 매개변수로 전달할 수 있다.

      func outputConversion(convertFunc: (Float) -> Float, value: Float) {
      	let result = convertFunc(value)
      	print("Result = \(result)")
      }
    • 위의 outputConversion 함수를 호출할 때 선언된 데이터 타입과 일치하는 함수를 전달해보자.
      - 매개변수로 적절한 변환 함수를 전달하면 인치를 피트 또는 야드로 변환하기 위하여 동일한 함수가 호출될 수 있다.

      outputConversion(convertFunc: toYards, value: 10) //야드로 변경하는 inchesToYards 함수 호출
      outputConversion(convertFunc: toFeet, value: 10) //피트로 변경하는 inchesToFeet 함수 호출
    • Swift 함수는 1급 객체이므로 리턴값으로 사용할 수 있다.
      - 반환 타입으로 함수의 타입을 선언하면 함수도 반환될 수 있다.
      - 다음 함수는 Blooean 매개변수의 값에 따라 toFeet 함수 또는 toYards 함수를 반환

      func deciderFunction( feet: Bool) -> (Float) -> Float {
      	if feet {
      	 return toFeet
      	} else {
      		return toYards
      	}
      }
profile
하루하루 꾸준히

0개의 댓글