swift 함수와 메서드의 차이에 대해 알아보자
오늘은 함수와 메서드 차이가 무엇있지 확인해 볼려고 한다.
함수와 메서드의 정의와 소속성은??
함수
1. 독립적으로 정의
2. 특정한 객체나 타입에 속해 있지 않다.
3. 일반적으로 전역 범위에서 정의 된다.
4. 특정 범위 내에 내장된다.
메서드
1. 클래스 , 구조체, 열거형 등의 특정한 타입에 속해 있다.
2. 객체 지향 프로그래밍에서 해당 객체의 특정한 기능을 수행하기 위해 사용된다.
여기서 의문점???
1. 객체와 타입 무엇인가?
2. 전역 범위가 무엇인가?
3. 객체 지향 프로그래밍은 무엇인가?
이것이 무엇인지 모르니깐 어떻게 써야되는지 이해가 되지 않았다. 그래서 공부해보자
1. 객체는 무엇인가?
객체(object)란?
- 객체라는 것은 메세지를 전달 받을 수 있는 대상을 말합니다. 강아지에게 "짖어"라고 한다면 강아지를 객체라고 할 수 있습니다.
https://accoding.tistory.com/19
swift 객체에 대해 알아보자
코딩을 시작하면서 객체지향 프로그램 객체를 어떻게 이건 객체가 아니다 말은 하는데객체가 도대체 머야??? 생각이 들어서 찾아보게 되었다. 객체(object)란?객체라는 것은 메세지를 전달 받을
accoding.tistory.com
자세한 내용은 위에 참조해보자!
그럼 타입은 무엇인가?
타입은 크게 두가지로 나뉜다
1. 명명된 타입
2. 복합 타입
명명된 타입 - 클래스, 구조체, 열거형, 그리고 프로토콜을 포함합니다. 예를 들어 MyClass 라는 사용자 정의 클래스의 인스턴스는 MyClass 타입을 가집니다. 사용자 정의 명명된 타입 외에도 Swift 표준 라이브러리는 배열, 딕셔너리, 그리고 옵셔널 값을 나타내는 타입을 포함하여 일반적으로 사용되는 명명된 타입을 정의합니다.
복합 타입 (compound type) 은 Swift 언어 자체에 정의된 이름이 없는 타입입니다. 복합 타입은 함수 타입과 튜플 타입 두가지가 있습니다. 복합 타입은 명명된 타입과 다른 복합 타입을 포함할 수 있습니다. 예를 들어 튜플 타입 (Int, (Int, Int)) 는 첫번째는 명명된 타입인 Int, 두번째는 다른 복합 타입 (Int, Int) 인 두개의 요소가 포함됩니다.
명명된 타입 또는 복합 타입을 묶을 소괄호를 넣을 수 있습니다. 그러나 타입을 묶은 소괄호는 아무런 영향을 주지 않습니다. 예를 들어 (Int) 는 Int 와 같습니다.
즉 fucn MyClss 이렇게 명시하면 MyClass 타입이 된단다.
전역범위? 머야 그게.
전역함수
fucn My{ "안녕" / 지역함수 }
전역함수
표현하자면 { } 중괄호 안에 있으면 지역 밖에 있으면 전역이다.
하지만 순서가 어떻게 돌아가는지 전역과 전역은 사용 할 . 수있지만 전역이 지역변수를 사용할 없고
지역은 전역을 사용할 수 있다.
https://accoding.tistory.com/20
swift 전역범위 지역범위에 대해 알아보자
동물적 감각으로 그냥 쓰고 있었지만 머라 명칭해야 될지 몰랐다....독학의 길은 끝도 없는 것 같다.그래서 이름을 기억하기 위해 사용법을 정확하기 알기 위해 이렇게 남겨본다.전역범위와 지
accoding.tistory.com
윗 글을 참고하면 이해가 쉬울 . 수있다.
Swift 객체지향 프로그래밍
- 객체지향 프로그래밍은 프로그램을 명령어의 집합으로 보는 것을 넘어, 여러 객체들의 모임으로 보는 것이다.
- 각각의 객체는 메시지를 주고 받을 수 있으며, 데이터를 처리할 수 있다.
객체지향 프로그램이 도데체 왜 필요한건가!!!!
- 프로그래밍에도 코드를 조금 더 효율적으로 만들고 작성하기 위한 패러다임이 존재한다.
- 절차 지향형 프로그래밍, 객체지향형 프로그래밍, 함수형 프로그래밍, 논리형 프로그래밍 등이 존재한다.
- 한편, Swift 언어는 객체지향형, 함수형, 프로토콜 지향 프로그래밍을 모두 다룰 수 있는 언어이다.
- 단, iOS 프레임워크가 객체지향형 프로그래밍으로 구현되어 있어서, 객체지향 프로그래밍을 하도록 권장한다.
스위프트에서는 요렇게 정리를 하고 있다!
코드를 더 효율적으로 만들기 위함이다 어째든!
호출 방식
함수 - 직접 호출 addNumbers(5, 3)
메서드 - 클래스를 만들고 클래스 내부 지역변수에서 함수를 만들어서 호출! myObject.increment()
// 함수 호출 방식
func My(_ person: Int , _ Person2: Int) -> Int {
return person + Person2
}
My(1, 2)
//메서드 호출 방식
// Person 클래스
class Person {
var name: String
var age: Int
init(name: String, age: Int) { // 클래스 초기화
self.name = name
self.age = age
}
}
// Person 클래스의 인스턴스
var 철수: Person = Person(name: "철수", age: 17)
var 영희: Person = Person(name: "영희", age: 18)
var 민수: Person = Person(name: "민수", age: 19)
소속성
함수
1. 특정한 객체의 속송이나 상태에 접근 할 수 없다.
2. 주어진 매개변수를 받아들여 작업을 수행하고 값을 반환하는데 집중된다.
매개변수와 알규멘트가 먼지는 아래에서 참고해보자
https://accoding.tistory.com/22
swift 매개변수 알규멘트 차이에 대해 알아보자!
매개변수 파라미터는 알겠는데 알규멘트로 말할때도 있고 내가 봤을때는 같은데 머지하고 궁굼하게 되어 다른분이 잘 정리한 것을 찾아보게 되었고 정리를 첨부하게 되었다.난 매일 까먹으니
accoding.tistory.com
메서드
1. 특정 객체 속성이나 상태에서 접근 가능
2. 객체의 상태를 변경하거나 속성에 접근하여 작업을 수행하는데 사용
함수 예시를 보자
func 함수_이름(아규먼트_레이블: 파라미터_타입) -> 리턴_타입 {
// ... 코드
}
// 네이밍 컨벤션으로 카멜케이스를 사용합니다 (ex- methodName 🙆🏻♀️ / method_name 🙅🏻♀️)
func sayHi(friend: String) {
print("Hi~ \(friend)!")
}
sayHi(friend: "영호")
func sayHi(to friend: String) {
print("Hi~ \(friend)!")
}
sayHi(to: "영호")
func sayHi(_ friend: String) -> String {
return ("Hi~ \(friend)!")
}
print(sayHi("영호"))
// 출력값: Hi~ 영호!
Tip) Input(입력값)과 Output(출력값)을 고려하라
// 위의 그림에서 x는 입력값, y 혹은 f(x)는 출력값
// 이를 풀어서 설명하면 x라는 데이터를 이용해서 y 혹은 f(x)라는 결과를 도출
// 정상 몸무게 = (키 - 100) * (9/10) 이라고 할 때
// 특정 키에 알맞은 몸무게를 구하는 함수
func getWeight(height: Int) -> Double {
let weight = (height - 100) * 9 / 10
return Double(weight)
}
// 특정 몸무게에 알맞은 키를 구하는 함수
func getHeight(weight: Int) -> Double {
let height = weight * 10 / 9 + 100
return Double(height)
}
즉 리턴 값을 잘 반환 해줘야지 답을 얻을 수 있다.
요약해보자!
즉 클래스, 구조체, 열거형 등 안에 쓰면 메소드
외부에 단독적으로 쓰면 함수라고 생각하면 될거 같다.