안드로이드 앱 개발에 익숙한 사람이 iOS 앱 개발과 접촉한 비교표
2018년 신규 입사해 전자티켓 앱을 개발 중이다.
학창시절에는 주로 안드로이드 애플리케이션을 개발했고, 입사 후에도 iOS 개발에 참여했다.
개시하다
iOS 개발에 관해 더 깊이 이해할 수 있도록 많은 것을 조사했다
아무래도 지금까지 iOS를 시작한 사람들이 안드로이드를 시작하면 많이 하는 것 같지만, 반대로 안드로이드를 시작한 사람들이 iOS를 시작하면 잘 안 보일 것 같아요.
iOS로 안드로이드를 이루고 싶은 그거!어떡해!이런 장면이 너무 많아서 곤란하다
이제야 이런 기분이지만 지금까지 iOS에 당혹스러웠던 것들, 사용하기 편한 것들 등을 정리해보고 싶다
지금은 약간 블랙 스프레트 형식이지만 로컬 애플리케이션도 많이 만들었다고 생각해요... iOS를 새로 시작하는 분들께 조금이나마 도움이 된다면 좋겠는데...!
기초명칭편
Activity
iOS
대략적인 이해로 iOSViewController
와 안드로이드의Activity는 같은 역할을 한다.화면 조작이 가능합니다.
여기서 MVC, MVP, MVM 같은 것을 얘기하면 길어질 수 있으니 그만하자.
라이프 사이클 편
안드로이드와 iOS의 라이프 사이클을 비교하면서 대체로 비슷한 동작을 정리했다.
완전히 함께 있는 것은 아니기 때문에 주의해야 한다.
onCerate
Activity가 처음 생성될 때 무엇을 하고 싶은지 안드로이드onCreate
에서 처리됩니다.
iOS
loadView
와 viewDidLoad
의 동작은 기본적으로onCreate에 가깝다.loadView
View를 읽을 때 호출됨viewDidLoad
는 호출loadView
후 한 번만 부른다.
onResume
Avtivity가 표시될 때 무엇을 하고 싶은지 안드로이드 onResume
에서 처리합니다.
iOS
viewWillAppear
와 viewDidAppear
의 동작은 기본적으로 onResume에 가깝다.viewWillAppear
View가 표시되기 전에 호출됩니다.viewDidAppear
View가 표시된 즉시 호출됩니다.
onPause
또 다른 액티비티가 불렸을 때 무엇을 하고 싶은지 안드로이드onPause
에서 처리한다.
iOS
viewWillDisappear
의 동작은 기본적으로 onPause에 가깝다.viewWillDisappear
View가 숨겨지기 전에 호출됩니다.
onStop
다른 Activity가 표시되지 않을 때 무엇을 하고 싶은지 안드로이드onStop
에서 처리됩니다.
iOS
viewDidDisappear
의 동작은 기본적으로 온스톱에 가깝다.viewDidDisappear
View가 숨겨진 후 즉시 호출됩니다.
onDestroy
액티비티가 폐기된 시점에 무엇을 하고 싶은지 안드로이드일 경우onDestroy
내 처리한다.
iOS
viewWillDisappear
와viewDidDisappear
안드로이드가 말하는Activity의 폐기계 처리를 진행한다.onDestroy의 느낌, 폐기된 타이밍, 이런 분류로 따지면 맞는 게 없나요?그렇게 지도 모른다, 아마, 아마...
뷰가 표시되지 않을 때 viewWillDisappear
→viewDidDisappear
로 불리는 것을 알면 OK인가요?
iOS의 라이프 사이클을 이해하는 토대에서 가장 유용한 글은여기.이다.
UI 편
레이아웃 시스템
ConstraintLayout
안드로이드에서는 상대적 위치 관계에 제약을 더해 View를 구성하려는 경우ConstraintLayout
를 사용합니다.
iOS
AutoLayout
.
Android와 마찬가지로 각 View를 제약합니다.
LinearLayout
View를 세로 또는 세로 방향으로 배치하려면 LinearLayout
를 사용합니다.
iOS
StackView
.
LinerLayout처럼 View를 세로나 가로로 한 열로 배열하거나 그 중의 View를 제약할 수 있다.
안드로이드의 관점에서 링크어Layout은 부모, 아이는 ConstraintLayout의 상태다.
StackView가 등장하기 전에 Story Board는 대량의 Constraint에서 엉망진창이 되었지만 이 등장으로 간결하고 아름답고 알기 쉽게 변했다.
뷰와 뷰 사이에 새 뷰를 삽입하는 것도 쉬워져서 정말 감동적이었다.
StackView를 이해하는 데 매우 유용한 문장은여기.이다.
리스트 시스템
ListView
무언가를 일렬로 배열하고 싶을 때 안드로이드ListView
를 사용한다.
여기서 ListView의 목록 항목을 복잡하게 사용자 정의했다기보다는 아주 간단한 배열 요소의 목록 표시를 상상하는 것이 낫다.
iOS
TableView
.TableView
아주 간단한 목록 표시에 적합합니다.
사용자 정의 목록
최근에 리스트RecyclerView
가 나오면 헤어져 보려고 해요.RecyclerView
또는 목록 항목을 복잡하게 사용자 정의하여 목록을 표시할 때(스크롤 표시)
iOS
사용ScrollView
+StackView
.
스크롤을 표시할 때 스크롤 영역은 ScrollView
이고 항목은 StackView
에서 이루어집니다.
Fragment
지금은 Android가 빠질 수 없는 Fragment입니다. 이번에는 Activity에서 여러 화면을 바꿨습니다.
어떤 일을 하는 상황을 상상해 보세요.
iOS
xib
를 사용하여 ViewController에서 교체했습니다.xib
는 안드로이드가 말한 xml (레이아웃 파일) 이다.
저는 Fragment와 관련된 xml을 생각해서 xib를 통해 각자의 화면을 만들고 Activity와 같은 역할을 하는 ViewController에서 디스플레이의 xib를 바꾸어 Fragment와 같은 동작으로 화면 전환을 실현했습니다.
견본
버튼 전환 xib 샘플class ViewController: UIViewController {
@IBOutlet weak var container:UIView!
let redView:UIView = UINib(nibName: "RedView", bundle:nil).instantiate(withOwner: self, options: nil)[0] as! UIView
let blueView:UIView = UINib(nibName: "BlueView", bundle:nil).instantiate(withOwner: self, options: nil)[0] as! UIView
var changeFlag = false
override func viewDidLoad() {
super.viewDidLoad()
changeView()
}
func changeView() {
let width = self.container.bounds.size.width
let height = self.container.bounds.size.height
let frame = CGRect(x:0, y:0, width:width, height:height)
if changeFlag {
blueView.removeFromSuperview()
redView.frame = frame
container.addSubview(redView)
changeFlag = false
} else {
redView.removeFromSuperview()
blueView.frame = frame
container.addSubview(blueView)
changeFlag = true
}
}
@IBAction func click(sender:AnyObject){
changeView()
}
}
Buton이 포함된 뷰는 고정 뷰이고 container는 가변 뷰입니다.
이런 느낌으로 xib에서 뷰를 제작하고 디스플레이 로고에 따라 교체해 프래그먼트 화면 전환적인 움직임을 이뤘다.
이번 글을 쓰게 된 계기의 실행이었고 상당히 고민한 결과입니다. 더 좋은 방법이 있다면 꼭 댓글로 알려주세요
총결산
라이프 사이클
Android
iOS
onCerate
loadView/viewDidLoad
onResume
viewWillAppear/viewDidAppear
onStop
viewDidDisappear
onDestroy
-
UI 시스템
Android
iOS
ConstraintLayout
AutoLayout(Constraint)
LinearLayout
StackView
ListView(단순 열 정렬)
TableView
사용자 정의 목록
ScrollView + StackView
Fragment
바꾸다
끝말
운영체제 사이에는 좋은 점과 불편한 점이 각기 다르지만, 잘하는 사람을 이용해 미리 인상을 만들면 이해가 깊어지기 쉽나요?내 생각엔
나처럼 안드로이드 그거 iOS로 어떡해!고민이 되는 분들의 참고가 된다면 기쁘겠습니다. 이 글을 읽고 iOS 엔지니어가 안드로이드 개발에도 관심이 있다면 기쁘겠습니다!
Reference
이 문제에 관하여(안드로이드 앱 개발에 익숙한 사람이 iOS 앱 개발과 접촉한 비교표), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mii-chang/items/945527569813362175e0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Activity
iOS
대략적인 이해로 iOS
ViewController
와 안드로이드의Activity는 같은 역할을 한다.화면 조작이 가능합니다.여기서 MVC, MVP, MVM 같은 것을 얘기하면 길어질 수 있으니 그만하자.
라이프 사이클 편
안드로이드와 iOS의 라이프 사이클을 비교하면서 대체로 비슷한 동작을 정리했다.
완전히 함께 있는 것은 아니기 때문에 주의해야 한다.
onCerate
Activity가 처음 생성될 때 무엇을 하고 싶은지 안드로이드onCreate
에서 처리됩니다.
iOS
loadView
와 viewDidLoad
의 동작은 기본적으로onCreate에 가깝다.loadView
View를 읽을 때 호출됨viewDidLoad
는 호출loadView
후 한 번만 부른다.
onResume
Avtivity가 표시될 때 무엇을 하고 싶은지 안드로이드 onResume
에서 처리합니다.
iOS
viewWillAppear
와 viewDidAppear
의 동작은 기본적으로 onResume에 가깝다.viewWillAppear
View가 표시되기 전에 호출됩니다.viewDidAppear
View가 표시된 즉시 호출됩니다.
onPause
또 다른 액티비티가 불렸을 때 무엇을 하고 싶은지 안드로이드onPause
에서 처리한다.
iOS
viewWillDisappear
의 동작은 기본적으로 onPause에 가깝다.viewWillDisappear
View가 숨겨지기 전에 호출됩니다.
onStop
다른 Activity가 표시되지 않을 때 무엇을 하고 싶은지 안드로이드onStop
에서 처리됩니다.
iOS
viewDidDisappear
의 동작은 기본적으로 온스톱에 가깝다.viewDidDisappear
View가 숨겨진 후 즉시 호출됩니다.
onDestroy
액티비티가 폐기된 시점에 무엇을 하고 싶은지 안드로이드일 경우onDestroy
내 처리한다.
iOS
viewWillDisappear
와viewDidDisappear
안드로이드가 말하는Activity의 폐기계 처리를 진행한다.onDestroy의 느낌, 폐기된 타이밍, 이런 분류로 따지면 맞는 게 없나요?그렇게 지도 모른다, 아마, 아마...
뷰가 표시되지 않을 때 viewWillDisappear
→viewDidDisappear
로 불리는 것을 알면 OK인가요?
iOS의 라이프 사이클을 이해하는 토대에서 가장 유용한 글은여기.이다.
UI 편
레이아웃 시스템
ConstraintLayout
안드로이드에서는 상대적 위치 관계에 제약을 더해 View를 구성하려는 경우ConstraintLayout
를 사용합니다.
iOS
AutoLayout
.
Android와 마찬가지로 각 View를 제약합니다.
LinearLayout
View를 세로 또는 세로 방향으로 배치하려면 LinearLayout
를 사용합니다.
iOS
StackView
.
LinerLayout처럼 View를 세로나 가로로 한 열로 배열하거나 그 중의 View를 제약할 수 있다.
안드로이드의 관점에서 링크어Layout은 부모, 아이는 ConstraintLayout의 상태다.
StackView가 등장하기 전에 Story Board는 대량의 Constraint에서 엉망진창이 되었지만 이 등장으로 간결하고 아름답고 알기 쉽게 변했다.
뷰와 뷰 사이에 새 뷰를 삽입하는 것도 쉬워져서 정말 감동적이었다.
StackView를 이해하는 데 매우 유용한 문장은여기.이다.
리스트 시스템
ListView
무언가를 일렬로 배열하고 싶을 때 안드로이드ListView
를 사용한다.
여기서 ListView의 목록 항목을 복잡하게 사용자 정의했다기보다는 아주 간단한 배열 요소의 목록 표시를 상상하는 것이 낫다.
iOS
TableView
.TableView
아주 간단한 목록 표시에 적합합니다.
사용자 정의 목록
최근에 리스트RecyclerView
가 나오면 헤어져 보려고 해요.RecyclerView
또는 목록 항목을 복잡하게 사용자 정의하여 목록을 표시할 때(스크롤 표시)
iOS
사용ScrollView
+StackView
.
스크롤을 표시할 때 스크롤 영역은 ScrollView
이고 항목은 StackView
에서 이루어집니다.
Fragment
지금은 Android가 빠질 수 없는 Fragment입니다. 이번에는 Activity에서 여러 화면을 바꿨습니다.
어떤 일을 하는 상황을 상상해 보세요.
iOS
xib
를 사용하여 ViewController에서 교체했습니다.xib
는 안드로이드가 말한 xml (레이아웃 파일) 이다.
저는 Fragment와 관련된 xml을 생각해서 xib를 통해 각자의 화면을 만들고 Activity와 같은 역할을 하는 ViewController에서 디스플레이의 xib를 바꾸어 Fragment와 같은 동작으로 화면 전환을 실현했습니다.
견본
버튼 전환 xib 샘플class ViewController: UIViewController {
@IBOutlet weak var container:UIView!
let redView:UIView = UINib(nibName: "RedView", bundle:nil).instantiate(withOwner: self, options: nil)[0] as! UIView
let blueView:UIView = UINib(nibName: "BlueView", bundle:nil).instantiate(withOwner: self, options: nil)[0] as! UIView
var changeFlag = false
override func viewDidLoad() {
super.viewDidLoad()
changeView()
}
func changeView() {
let width = self.container.bounds.size.width
let height = self.container.bounds.size.height
let frame = CGRect(x:0, y:0, width:width, height:height)
if changeFlag {
blueView.removeFromSuperview()
redView.frame = frame
container.addSubview(redView)
changeFlag = false
} else {
redView.removeFromSuperview()
blueView.frame = frame
container.addSubview(blueView)
changeFlag = true
}
}
@IBAction func click(sender:AnyObject){
changeView()
}
}
Buton이 포함된 뷰는 고정 뷰이고 container는 가변 뷰입니다.
이런 느낌으로 xib에서 뷰를 제작하고 디스플레이 로고에 따라 교체해 프래그먼트 화면 전환적인 움직임을 이뤘다.
이번 글을 쓰게 된 계기의 실행이었고 상당히 고민한 결과입니다. 더 좋은 방법이 있다면 꼭 댓글로 알려주세요
총결산
라이프 사이클
Android
iOS
onCerate
loadView/viewDidLoad
onResume
viewWillAppear/viewDidAppear
onStop
viewDidDisappear
onDestroy
-
UI 시스템
Android
iOS
ConstraintLayout
AutoLayout(Constraint)
LinearLayout
StackView
ListView(단순 열 정렬)
TableView
사용자 정의 목록
ScrollView + StackView
Fragment
바꾸다
끝말
운영체제 사이에는 좋은 점과 불편한 점이 각기 다르지만, 잘하는 사람을 이용해 미리 인상을 만들면 이해가 깊어지기 쉽나요?내 생각엔
나처럼 안드로이드 그거 iOS로 어떡해!고민이 되는 분들의 참고가 된다면 기쁘겠습니다. 이 글을 읽고 iOS 엔지니어가 안드로이드 개발에도 관심이 있다면 기쁘겠습니다!
Reference
이 문제에 관하여(안드로이드 앱 개발에 익숙한 사람이 iOS 앱 개발과 접촉한 비교표), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mii-chang/items/945527569813362175e0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
레이아웃 시스템
ConstraintLayout
안드로이드에서는 상대적 위치 관계에 제약을 더해 View를 구성하려는 경우
ConstraintLayout
를 사용합니다.iOS
AutoLayout
.Android와 마찬가지로 각 View를 제약합니다.
LinearLayout
View를 세로 또는 세로 방향으로 배치하려면
LinearLayout
를 사용합니다.iOS
StackView
.LinerLayout처럼 View를 세로나 가로로 한 열로 배열하거나 그 중의 View를 제약할 수 있다.
안드로이드의 관점에서 링크어Layout은 부모, 아이는 ConstraintLayout의 상태다.
StackView가 등장하기 전에 Story Board는 대량의 Constraint에서 엉망진창이 되었지만 이 등장으로 간결하고 아름답고 알기 쉽게 변했다.
뷰와 뷰 사이에 새 뷰를 삽입하는 것도 쉬워져서 정말 감동적이었다.
StackView를 이해하는 데 매우 유용한 문장은여기.이다.
리스트 시스템
ListView
무언가를 일렬로 배열하고 싶을 때 안드로이드
ListView
를 사용한다.여기서 ListView의 목록 항목을 복잡하게 사용자 정의했다기보다는 아주 간단한 배열 요소의 목록 표시를 상상하는 것이 낫다.
iOS
TableView
.TableView
아주 간단한 목록 표시에 적합합니다.사용자 정의 목록
최근에 리스트
RecyclerView
가 나오면 헤어져 보려고 해요.RecyclerView
또는 목록 항목을 복잡하게 사용자 정의하여 목록을 표시할 때(스크롤 표시)iOS
사용
ScrollView
+StackView
.스크롤을 표시할 때 스크롤 영역은
ScrollView
이고 항목은 StackView
에서 이루어집니다.Fragment
지금은 Android가 빠질 수 없는 Fragment입니다. 이번에는 Activity에서 여러 화면을 바꿨습니다.
어떤 일을 하는 상황을 상상해 보세요.
iOS
xib
를 사용하여 ViewController에서 교체했습니다.xib
는 안드로이드가 말한 xml (레이아웃 파일) 이다.저는 Fragment와 관련된 xml을 생각해서 xib를 통해 각자의 화면을 만들고 Activity와 같은 역할을 하는 ViewController에서 디스플레이의 xib를 바꾸어 Fragment와 같은 동작으로 화면 전환을 실현했습니다.
견본
버튼 전환 xib 샘플
class ViewController: UIViewController {
@IBOutlet weak var container:UIView!
let redView:UIView = UINib(nibName: "RedView", bundle:nil).instantiate(withOwner: self, options: nil)[0] as! UIView
let blueView:UIView = UINib(nibName: "BlueView", bundle:nil).instantiate(withOwner: self, options: nil)[0] as! UIView
var changeFlag = false
override func viewDidLoad() {
super.viewDidLoad()
changeView()
}
func changeView() {
let width = self.container.bounds.size.width
let height = self.container.bounds.size.height
let frame = CGRect(x:0, y:0, width:width, height:height)
if changeFlag {
blueView.removeFromSuperview()
redView.frame = frame
container.addSubview(redView)
changeFlag = false
} else {
redView.removeFromSuperview()
blueView.frame = frame
container.addSubview(blueView)
changeFlag = true
}
}
@IBAction func click(sender:AnyObject){
changeView()
}
}
Buton이 포함된 뷰는 고정 뷰이고 container는 가변 뷰입니다.
이런 느낌으로 xib에서 뷰를 제작하고 디스플레이 로고에 따라 교체해 프래그먼트 화면 전환적인 움직임을 이뤘다.
이번 글을 쓰게 된 계기의 실행이었고 상당히 고민한 결과입니다. 더 좋은 방법이 있다면 꼭 댓글로 알려주세요
총결산
라이프 사이클
Android
iOS
onCerate
loadView/viewDidLoad
onResume
viewWillAppear/viewDidAppear
onStop
viewDidDisappear
onDestroy
-
UI 시스템
Android
iOS
ConstraintLayout
AutoLayout(Constraint)
LinearLayout
StackView
ListView(단순 열 정렬)
TableView
사용자 정의 목록
ScrollView + StackView
Fragment
바꾸다
끝말
운영체제 사이에는 좋은 점과 불편한 점이 각기 다르지만, 잘하는 사람을 이용해 미리 인상을 만들면 이해가 깊어지기 쉽나요?내 생각엔
나처럼 안드로이드 그거 iOS로 어떡해!고민이 되는 분들의 참고가 된다면 기쁘겠습니다. 이 글을 읽고 iOS 엔지니어가 안드로이드 개발에도 관심이 있다면 기쁘겠습니다!
Reference
이 문제에 관하여(안드로이드 앱 개발에 익숙한 사람이 iOS 앱 개발과 접촉한 비교표), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mii-chang/items/945527569813362175e0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
운영체제 사이에는 좋은 점과 불편한 점이 각기 다르지만, 잘하는 사람을 이용해 미리 인상을 만들면 이해가 깊어지기 쉽나요?내 생각엔
나처럼 안드로이드 그거 iOS로 어떡해!고민이 되는 분들의 참고가 된다면 기쁘겠습니다. 이 글을 읽고 iOS 엔지니어가 안드로이드 개발에도 관심이 있다면 기쁘겠습니다!
Reference
이 문제에 관하여(안드로이드 앱 개발에 익숙한 사람이 iOS 앱 개발과 접촉한 비교표), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mii-chang/items/945527569813362175e0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)