안드로이드 앱 개발에 익숙한 사람이 iOS 앱 개발과 접촉한 비교표

11765 단어 AndroidiOS
DMM.com Advent Calendar 201821일차 책임자@mii-chang
2018년 신규 입사해 전자티켓 앱을 개발 중이다.
학창시절에는 주로 안드로이드 애플리케이션을 개발했고, 입사 후에도 iOS 개발에 참여했다.

개시하다


iOS 개발에 관해 더 깊이 이해할 수 있도록 많은 것을 조사했다
아무래도 지금까지 iOS를 시작한 사람들이 안드로이드를 시작하면 많이 하는 것 같지만, 반대로 안드로이드를 시작한 사람들이 iOS를 시작하면 잘 안 보일 것 같아요.
iOS로 안드로이드를 이루고 싶은 그거!어떡해!이런 장면이 너무 많아서 곤란하다
이제야 이런 기분이지만 지금까지 iOS에 당혹스러웠던 것들, 사용하기 편한 것들 등을 정리해보고 싶다
지금은 약간 블랙 스프레트 형식이지만 로컬 애플리케이션도 많이 만들었다고 생각해요... iOS를 새로 시작하는 분들께 조금이나마 도움이 된다면 좋겠는데...!

기초명칭편


Activity


iOS


대략적인 이해로 iOSViewController와 안드로이드의Activity는 같은 역할을 한다.화면 조작이 가능합니다.
여기서 MVC, MVP, MVM 같은 것을 얘기하면 길어질 수 있으니 그만하자.

라이프 사이클 편


안드로이드와 iOS의 라이프 사이클을 비교하면서 대체로 비슷한 동작을 정리했다.
완전히 함께 있는 것은 아니기 때문에 주의해야 한다.

onCerate


Activity가 처음 생성될 때 무엇을 하고 싶은지 안드로이드onCreate에서 처리됩니다.

iOS

loadViewviewDidLoad의 동작은 기본적으로onCreate에 가깝다.loadView View를 읽을 때 호출됨viewDidLoad는 호출loadView 후 한 번만 부른다.

onResume


Avtivity가 표시될 때 무엇을 하고 싶은지 안드로이드 onResume 에서 처리합니다.

iOS

viewWillAppearviewDidAppear의 동작은 기본적으로 onResume에 가깝다.viewWillAppear View가 표시되기 전에 호출됩니다.viewDidAppear View가 표시된 즉시 호출됩니다.

onPause


또 다른 액티비티가 불렸을 때 무엇을 하고 싶은지 안드로이드onPause에서 처리한다.

iOS

viewWillDisappear의 동작은 기본적으로 onPause에 가깝다.viewWillDisappear View가 숨겨지기 전에 호출됩니다.

onStop


다른 Activity가 표시되지 않을 때 무엇을 하고 싶은지 안드로이드onStop에서 처리됩니다.

iOS

viewDidDisappear의 동작은 기본적으로 온스톱에 가깝다.viewDidDisappear View가 숨겨진 후 즉시 호출됩니다.

onDestroy


액티비티가 폐기된 시점에 무엇을 하고 싶은지 안드로이드일 경우onDestroy 내 처리한다.

iOS

viewWillDisappearviewDidDisappear안드로이드가 말하는Activity의 폐기계 처리를 진행한다.onDestroy의 느낌, 폐기된 타이밍, 이런 분류로 따지면 맞는 게 없나요?그렇게 지도 모른다, 아마, 아마...
뷰가 표시되지 않을 때 viewWillDisappearviewDidDisappear로 불리는 것을 알면 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 엔지니어가 안드로이드 개발에도 관심이 있다면 기쁘겠습니다!

좋은 웹페이지 즐겨찾기