본문 바로가기

iOS

iOS 4주차

함수와 메소드(method)의 차이

특성 함수 메소드
독립적인 코드 블록 클래스, 구조체, 열거형 내부에 정의된 함수 클래스, 구조체, 열거형 내부에 정의된 함수
소속 독립적, 어디에도 속하지 않음 특정 클래스나 객체에 속함
호출 방식 단독으로 호출 가능 해당 클래스의 객체를 통해 호출
프로그래밍 패러다임 주로 절차적 프로그래밍에서 사용 객체 지향 프로그래밍의 핵심 개념
접근성 전역적으로 접근 가능한 경우가 많음 해당 클래스의 인스턴스나 객체를 통해서만 접근 가능
사용 목적 일반적인 기능 수행 객체의 행동을 정의
this/self 키워드 사용하지 않음 객체 자신을 참조하기 위해 사용 가능
상속 해당 없음 상속 가능

 

argument Vs. parameter

특성 parameter argument
정의 함수나 메소드를 정의할 때 선언되는 변수 함수나 메소드를 호출할 때 전달되는 실제 값
역할 함수가 받을 수 있는 입력의 유형과 수를 정의 함수 실행 시 실제 데이터를 제공
위치 함수 선언/정의에 나타남 함수 호출 시 사용됨
예시 코드 def add(x, y): (x와 y가 parameters) result = add(5, 3) (5와 3이 arguments)
기본값 설정 기본값을 가질 수 있음 기본값을 가질 수 없음
범위 함수 내에서 지역 변수로 작동 함수 외부의 변수나 리터럴 값일 수 있음
유연성 함수의 예상 입력을 정의하는 템플릿 역할 함수에 다양한 값을 전달하여 동적 실행 가능
시점 함수 정의 시 결정됨 함수 호출 시 결정됨
개수 함수 정의에 따라 고정됨 호출 시 다를 수 있음 (가변 인자의 경우)
def add(x, y):  # x와 y는 parameters
    return x + y

result = add(5, 3)  # 5와 3은 arguments

 

 

 


 

 

 

swift 함수 정의 방법

func sayHello() { // swift 언어는 func 리턴값이 없는 void함수들은 생략가능하다
    print("hello")
}

sayHello()

swift에서 함수 정의는 func로 지정 하고 리턴값이 없는 함수를 정의 할 경우에는 void를 생략 가능하다

 

Swift에서 함수는 func 키워드를 사용하여 정의합니다.

 

func greet(name: String) -> String {
    return "Hello, \(name)!"
}

이 함수는:

 

  • greet라는 이름을 가집니다.
  • name이라는 String 타입의 매개변수를 받습니다.
  • String 타입의 값을 반환합니다.

함수 호출

정의한 함수는 다음과 같이 호출할 수 있습니다:

let greeting = greet(name: "Alice")
print(greeting) // 출력: Hello, Alice!
 

 

 

 

시험 문제로 나올 수 있음

//
//func sayHello() { // swift 언어는 func 리턴값이 없는 void함수들은 생략가능하다
//  print("hello")
//}
//func add(x: Int, y: Int) -> Int {
//return(x+y)
//}
//sayHello()
//
//print(type(of: sayHello)) //() -> (). <- 예상 문제

func add(first x: Int, second y: Int) -> Int {
       return(x+y)
}
print(add(first: 10,second: 20))
var x : Int
x = add(first: 10,second: 20)
print(x)
print(type(of: add)) // (Int, Int) -> Int <- 예상 문제 함수의 자료형. add 함수의 이름

 

 

중요 

smile han

 

 

Swift 함수명

  •  함수명(외부매개변수명:외부매개변수명: ...)  <- 중요 
  • #function 리터럴을 사용하여 얻을 수 있음

 

func add(x: Int, y: Int) -> Int {
    print(#function) // add(_:with:) <- 함수 이름 add(_:_:) add(first:second:)
    return(x+y)
}

 

 

 

 

 

 

 

 


 

 

 

옵셔널 guard Vs. if

 

guard let 버전

func multiplyByTen(value: Int?) {
    guard let number = value else { return }  //guard가 거짓(nil)일 때 else 블록 실행
    print(number*10) //조건식이 참일 때 실행, 주의 : number를 guard문 밖인 여기서도 사용 가능
}
multiplyByTen(value: 3)   //30
multiplyByTen(value: nil)
multiplyByTen(value: 10)
  • guard 문은 조건을 검사하고, 조건이 거짓일 때 else 블록을 실행합니다.
  • 여기서는 value nil이 아닌 경우에 number라는 상수에 값을 할당합니다.
  • value nil이면 else 블록이 실행되어 함수가 즉시 종료됩니다.
  • guard문의 장점은 옵셔널 바인딩된 number를 guard 문 이후에도 사용할 수 있다는 것입니다.

 

if let 버전

func multiplyByTen(value: Int?) {
    if let number = value {//조건식이 참일 때 	블록 실행
        print(number*10)
    }
    else{
        print("nil")
        return
    }
}
multiplyByTen(value: 3)   //30
multiplyByTen(value: nil)
multiplyByTen(value: 10)
  • if let은 옵셔널 바인딩을 수행합니다. value nil이 아닌 경우에만 조건문 내부 블록이 실행됩니다.
  • value에 값이 있으면 그 값을 number라는 상수에 할당하고, 조건문 내부 블록을 실행합니다.
  • value nil이면 조건문 내부 블록을 건너뛰고 함수가 종료됩니다.

 

 


 

 

디폴트 매개변수(아규먼트) 정의하기

func greet(name: String, greeting: String = "Hello") {
    print("\(greeting), \(name)!")
}

greet(name: "Alice")           // 출력: Hello, Alice!
greet(name: "Bob", greeting: "Hi")  // 출력: Hi, Bob!

 

inout 파라미터

var myValue = 10
func doubleValue(value: inout Int) -> Int {
    value += value
    return(value)
}
print(myValue)
print(doubleValue(value: &myValue))
print(myValue)

 

  • inout 키워드는 함수 내에서 파라미터의 값을 변경하고, 그 변경사항을 원래 변수에 반영할 수 있게 해줍니다.
  • inout 파라미터를 사용할 때는 함수 호출 시 변수 앞에 &를 붙여야 합니다. 이는 해당 변수의 메모리 주소를 전달한다는 의미입니다.i
  • nout 파라미터는 값이 함수로 전달되고(in), 함수 내에서 수정되며(out), 함수 종료 시 원래 변수에 다시 할당됩니다(out).
print(myValue)  // 출력: 10
print(doubleValue(value: &myValue))  // 출력: 20
print(myValue)  // 출력: 20
  •  1. 첫 번째 print(myValue)는 초기값 10을 출력합니다.
  •  2. doubleValue(value: &myValue) 호출:
    • myValue의 값(10)이 함수로 전달됩니다.
    • 함수 내에서 value += value로 값이 20으로 변경됩니다.
    • 변경된 값 20이 반환되어 출력됩니다.
    • inout 파라미터이므로 변경된 값이 원래 변수 myValue에 반영됩니다.
  • 3. 마지막 print(myValue)는 20을 출력합니다. 이는 inout 파라미터로 인해 myValue의 값이 함수 내에서 변경되었음을 보여줍니다.
  •  

'iOS' 카테고리의 다른 글

iOS 9주차  (2) 2024.10.31
iOS 7주차  (0) 2024.10.17
iOS 5주차  (0) 2024.10.07
iOS 2주차  (0) 2024.09.12