기본으로 돌아와서 제가 인턴 면접 볼때 스위프트랑 옵젝씨의 차이점 + 스위프트의 언어적 특성에 대해서 질문을 받았던 적이 있습니다.
그때 어찌저찌 뇌피셜로 대답을 하긴 했지만, 한번 더 정리하고 넘어가면 좋을 듯 싶네요.
당시 iOS개발을 주로 하고 있다 하니 스위프트에 대해서 물어보셨는데, iOS 면접에서는 이것보단 더 높은 레벨의 질문을 하시겠죠..
하지만 기본도 모르는 감자기 때문에 저는 오늘도 정리를 합니다...
Objective-C의 동적 객체 모델과 매개변수 형식을 Swift에 도입
ARC(자동 참조 횟수 계산)를 지원하므로 쉽게 메모리를 관리할 수 있음
스위프트는 컴파일 언어다
컴파일러의 성능은 실행속도 향상 및 빌드 시간 단축에 최적화 되어있다.
스위프트는 거의 모든 문법에서 소괄호 생략가능, + 세미콜론 생략가능 but 중괄호는 생략할 수 없다 !!!
언어의 자유도가 높아서 작성자의 스타일에 따라 다양한 방식으로 코딩할 수 있다. but 다른 사람의 코드를 읽기 어려울 수 있다는 의미이기도 함.
스위프트의 역사에 대해서 설명하는 페이지만 슥 읽어봐도 내가 모르는게 너무 많다..
오버플로 연산자...? 그리고 버전대응하는 코드도 거의 안써봤구,,ㅜㅜ 맨날 최신으로 맞춰놓고 편하게 하려고 ㅎ.. 반성..
근데 역사를 쭉 그냥 책읽듯이 읽었는데 되게 재밌다.
Swift 의 언어적 특성
Safe : 안전한 프로그래밍을 지향, 옵셔널 기능, guard 구문, 오류처리, 강력한 타입 통제등을 통해 !
Fast : c언어를 기반으로 한 C, C++, Objective-C와 같은 언어를 대체하려는 목적으로 만듬, c수준과 동등한 성능ㄹ을 일정 수준으로 유지하는데 초점, 실행속도의 최적화, 컴파일러를 지속개량하여 더 빠른 커파일 성능 구현
Expressive : 더 사용하기 편하고 보기 좋은 문법 구현
다중 패러다임 프로그래밍 언어
명령형 프로그래밍 패러다임
객체지향 프로그래밍 패러다임
함수형 프로그래밍 패러다임
프로토콜지향 프로그래밍 패러다임
가장 강조하는 부분은 함수형, 프로토콜 지향 !!
객체지향 프로그래밍 패러다임
객체지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 기존의 명령형 프로그래밍의 시각에서 벗어나 여러개의 독맂된 단위인 객체의 모임으로 파악하고자하는 시각
각각의 객체는 서로 메시지를 주고 받고 데이터를 처리할 수 있습니다.
프로그램을 유연하고 쉽게 변경할 수 있도록 작성할 수 있어 대규모 소프트웨어 개발에 많이 사용됩니다.
개발과 유지보수를 간편하게 , 직관적으로 코드 분석
소프트웨어의 질을 향상하기 위해 강한응집력과 약한결합력 지향
클래스에 하나의 문제 해결을 위한 데이터와 메서들를 모아놓으 방식으로 응집력 강화
각 클래스는 독립적이 되도록 디자인해 결합력을 약화
자료 추상화, 상속, 다형성, 동적 바인딩
클래스
같은 종류의 집단에 속하는 속성과 행위를 정의한 것
객체지향 프로그램의 기본사용자 정의 데이터 타입
객체
클래스의 인스턴스 (인스턴스 : 실제로 메모리에 할당되어 동작하는 모양을 갖춘것)
객체는 자신의 고유의 속성이 있으며 클래스에서 정의한 행위를 할 수 있음
스위프트에서는 객체라는 용어보단 클래스의 인스턴스라는 표현을 사용 !
객체 != 인스턴스 구조체의 인스턴스 열거형의 인스턴스 등등 중에 클래스의 인스턴스에만 해당
메서드
객체가 클래스에 정의된 행위를 실질적으로 하는 함수
메서드를 통해 객체에 명령을 전달
=> 클래스의 이니셜라이저를 통해 메모리에 할당되고 초기화한 객체를 우리는 인스턴스라고 부름 !
인스턴스 프로퍼티에 값을 할당할 수도 있고 값을 가져올 수도 있다 !
인스턴스으 ㅣ메서드를 호출하여 작업을 수행하도록 할 수 있다 !
함수형 프로그래밍 패러다임
가장 큰 장점 : 대규모 병렬처리가 굉장히 쉽다 !!
프로그램이 상태의 변화 없이 데이터 처리를 수학적 함수 계산으로 취급하고자 하는 패러다임
기존 객체지향이나 명령형에서는 프로그램이 값이나 상태의 변화를 중요하게 여기지만 함수형 은 함수 자체의 응용을 중요하게 여김 !
명령형 함수를 이용하는 객체지향은 절차지향 프로그래밍이 포함되어있음 : 함수 실행 시 함수가 전달받은 전달인자 이외에도 포인터, 레퍼런스 값 등 객체의 상태 값 또는 메모리 참조 값등이 변겨오딜 수 있으며 함수 내부의 처리에도 영향을 미칠 수 있다.
함수형 프로그래밍은 순수하게 함수에 전달된 인자 값만 결과에 영향을 주므로 상태값을 갖지 않고 순수하게 함수만으로 동작
어떤 상황에서 프로그램을 실행하더라도 일정하게 같은 결과를 도출한다.
프로그램이 동작하는 흐름에서 상태가 변하지 않으면 함수 호출이 각각 상호 간섭없이 실행 -> 병렬처리의 부작용이거의 없음
프로토콜 지향은 참조 타입인 클래스의 인스턴스보다 값 타입을 더 효율적으로 사용 ! , 오류를 줄일 방안
구조체와 열거형에 기존의 클래스에서 구현할 수 있었던 캡슐화, 추상화, 접근제어 등의 기능을 모두 구현할 수 있다 !!!!
프로토콜의 익스텐션을 활용할 수 있기 때문에 프로토콜지향이 가능해짐 !
참조 타입의 참조 문제에서 조금 더 자유로울 수 있고, 다중상속이 불가능한 한계를 뛰어넘을 수 있으며, 더 나은 추상화 메커니즘을 구현할 수 있다. !!
=> 요건 좀 공감이 되는게 최근에 디자인패턴을 공부하면서 프로토콜이 필수적으로 등장하는디 .. 더 나은 추상화 메커니즘 인정 인정.!!
Swift
기본으로 돌아와서 제가 인턴 면접 볼때 스위프트랑 옵젝씨의 차이점 + 스위프트의 언어적 특성에 대해서 질문을 받았던 적이 있습니다. 그때 어찌저찌 뇌피셜로 대답을 하긴 했지만, 한번 더 정리하고 넘어가면 좋을 듯 싶네요. 당시 iOS개발을 주로 하고 있다 하니 스위프트에 대해서 물어보셨는데, iOS 면접에서는 이것보단 더 높은 레벨의 질문을 하시겠죠..
하지만 기본도 모르는 감자기 때문에 저는 오늘도 정리를 합니다...
스위프트의 역사에 대해서 설명하는 페이지만 슥 읽어봐도 내가 모르는게 너무 많다.. 오버플로 연산자...? 그리고 버전대응하는 코드도 거의 안써봤구,,ㅜㅜ 맨날 최신으로 맞춰놓고 편하게 하려고 ㅎ.. 반성.. 근데 역사를 쭉 그냥 책읽듯이 읽었는데 되게 재밌다.
Swift 의 언어적 특성
다중 패러다임 프로그래밍 언어
객체지향 프로그래밍 패러다임
클래스
객체
메서드
=> 클래스의 이니셜라이저를 통해 메모리에 할당되고 초기화한 객체를 우리는 인스턴스라고 부름 ! 인스턴스 프로퍼티에 값을 할당할 수도 있고 값을 가져올 수도 있다 ! 인스턴스으 ㅣ메서드를 호출하여 작업을 수행하도록 할 수 있다 !
함수형 프로그래밍 패러다임
가장 큰 장점 : 대규모 병렬처리가 굉장히 쉽다 !!
프로그램이 상태의 변화 없이 데이터 처리를 수학적 함수 계산으로 취급하고자 하는 패러다임
기존 객체지향이나 명령형에서는 프로그램이 값이나 상태의 변화를 중요하게 여기지만 함수형 은 함수 자체의 응용을 중요하게 여김 !
명령형 함수를 이용하는 객체지향은 절차지향 프로그래밍이 포함되어있음 : 함수 실행 시 함수가 전달받은 전달인자 이외에도 포인터, 레퍼런스 값 등 객체의 상태 값 또는 메모리 참조 값등이 변겨오딜 수 있으며 함수 내부의 처리에도 영향을 미칠 수 있다.
함수형 프로그래밍은 순수하게 함수에 전달된 인자 값만 결과에 영향을 주므로 상태값을 갖지 않고 순수하게 함수만으로 동작
어떤 상황에서 프로그램을 실행하더라도 일정하게 같은 결과를 도출한다.
프로그램이 동작하는 흐름에서 상태가 변하지 않으면 함수 호출이 각각 상호 간섭없이 실행 -> 병렬처리의 부작용이거의 없음
프로세스 혹은 스레드별로 특정 값을 참조하기 위해 락을 걸거나 대기할 필요가 없다.
필요한 만큼 함수를 나누어 처리할 수 있도록 스케일업할 수있음
함수를 일급 객체로 다룬다는 점이 큰 특징 !!