1. 26회 WWDC

2. OS X / iOS / watchOS + Music






OS X El Capitan

3. 요세미티 업데이트 비율이 55%이다. 윈도우 8.1은 7%에 불과하다.

4. 새로운 OS X의 이름은 요세미티안에서 찾았다. '엘 캐피튼'

5. 사용자 경험과 성능을 강조

6. 스팟라이트, 빌트인 앱, 윈도우 메니지먼트 시스템

7. 메일앱 스와이프 제스쳐를 이용한 편의성 증대

8. Pin site : site를 pin해 놓고 지속적으로 접근이 편리하도록 했다. 사파리 윈도우를 닫아도 다른 링크를 열어도 pin은 남아있다.

9. 탭 별로 미디어를 종료할 수 있다. 

10. 스팟라이트에서 게임 스코어를 확인하고, 날씨, 주식 등을 검색 가능하다. 또한 스팟라이트 창을 이동가능하다.

11. mail, finder 등의 검색이 강화됬다.

12. 여러 창이 열려있을 때, mission control을 통해 더욱 깔끔하게 윈도우를 관리할 수 있다.  

13. mail을 full-screen으로 이용할 때, 여러 탭을 열 수 있도록 하여 편의성을 증대했다.

14. split-view을 지원한다. 2개의 앱을 화면을 분할한 상태로 동시 실행이 가능하다.

15. 1.4배 앱 실행 속도, 2배 앱 전환 속도, 2배 메일 로딩 속도, 4배 PDF 로딩 속도 향상

16. metal을 OS X에서도 지원한다. 이는 CoreAnimation/CoreGraphics간의 openGL을 경량화 했다. 50% 향상된 렌더링 속도, 40% 향상된 레더링 효율성을 제공한다. 10배 빠른 draw call performance를 제공한다.






iOS 9

17.  iOS8의 업그레이드 비율 83%이다. 안드로이드5는 12% 수준이다.

18. Intelligence (시리, Seartch API), Apps(Wallet, Note, Maps, News), iPad, Foundation

19. 시리는 매주 10억건의 요청을 처리한다.

20. 작년보다 40% 더 정확해졌다.

21. 작년보다 40% 더 빨라졌다.

22. 시리로 자세한 사진 검색이 가능하다. (~에서 찍은 사진을 보여줘, ~의 사진을 보여줘)

23. '차에 탈때'와 같은 보다 자세한 시점과 사파리 링크, 메시지 등의 첨부 데이터를 리마인더에 등록하도록 성능이 향상됬다.

24. 이어폰을 연결하면 자동으로 음악 앱을 잠금화면에 띄워준다. 혹은 자동차를 타서 오디오 북을 띄운다던가, 이메일을 통해 자동으로 캘린더에 이벤틀를 등록한다던가, 교통상황을 고려하여 다음 이벤트를 위해 출발할 시간을 알려준다. 낯선 전화가 걸려오면 메일이나 기타 정보를 확인하여 예산되는 신원을 알려준다. 이와 같이 시리의 지능을 향상시켰다.

25. 홈 스크린 서치에선 사람과 혹은 사용할 앱을 시리가 추천해준다. 위치 기반한 근처 안내도 해준다. (구글 나우와 비슷)

26. Seartch API를 제공하여 서드 파티 앱에서 search 기능을 이용하여 detail view로 즉시 등러가도록 deep link를 제공한다.

27. Search를 통하여 각 단위의 변환도 검색 가능한다.

28. 개인 정보에 관하여 익명성을 보장하며 Apple ID와 연관 없이 랜덤 ID를 사용한다. 데이터의 활용에 대한 보안성을 강조했다.

29. Apple Pay 제휴사들이 늘어났다. Squre에서 작고 아름다운 리더기를 개발했다. 오늘(2015.6.8)부터 사전 구매 가능하며, 가을부터 정식 구매 가능하다.

30. Apple Pay가 US와 더불어 UK를 지원한다. 미국엔 100만, 영국엔 25만의 구매 지역을 확보했고 영국의 대중교통 시스템을 지원할 예정이다.

31. Pass book에 결제 카드, 리워드 카드 등 여러 종류의 카드들을 제공한다.이 같은 특징으로 인해 Pass book에서 Wallet로 이름을 바꾼다.

32. Tool bar를 추가했다. 체크 리스트를 이용 가능하고 스케치와 사진 첨부가 가능해진다. 사파리에서 share 기능을 통해 Note에 저장 가능하다. 더불어 Note에서 attachment view를 지원하여 깔끔한 UI를 지원한다. Note  모든 컨텐츠는 iOS 기기와 함께 Mac에서도 이와같은 feature를 지원한다.

33. Maps은 매주 50억의 요청을 처리한다. 3.5배 사용량이 늘었다. 

34. Maps는 대중 교통과 환승에 대한 기능을 포함했다. 버스, 전철, 페리와 걷는 것까지 고려했다. 복잡하고 먼 지하 구조물의 입구와 출구까지 안내를 통해 배려했다. 

35. Maps의 위와 같은 기능들은 전 세계적으로 몇몇 도시들에 지원된다. 

36. Nearby 기능을 지원해 근처 가게 정보를 알려주고 Apple Pay의 지원 여부도 알려준다.

37. News라는 앱이 새로 만들어졌다.

38. News는 개인에 기반한 아름다운 컨텐츠들을 지원한다. 즐겨찾기 토픽을 선택할 수 있다. 자동으로 커버를 구성한다. Apple news 포맷으로 제공된 기사들은 보다 아름답고 효율적으로 기사를 제공한다. (자기 자랑 : 속도, 애니메이션, 비디오, 그래픽 등)

39. 키보드의 Suggestion bar에서 툴바를 지원, 키보드 상에서 두 손가락을 이용하여 트랙패드처럼 이용가능하다. (scroll, selection 등)

40. 키보드 short cut과 빠른 앱 switcher를 지원한다.

41. 모서리에서 스와이프를 함으로써 overlay view(Slide Over라고 지칭)가 등장하는데, 여기 표시할 앱을 선택 가능하다. 이를 split-view로 표시하여 multi-touch와 muti-tasking을 완벽히 지원한다. (7:3, 5:5 split-rate 지원)

42. 비디오를 보면서 다른 작업을 할 수 있도록 player는 PIP(Picture-In-Picture)를 지원한다.

43. 좁은 화면에 등장하는 Slide Over는 size class와 auto layout을 통해 지원된다.

44. 그래픽 가속도를 1.6배향상 시키고 60% CPU 효율성 제고, 아이폰을 기준으로 배터리 1시간 정도 사용 효율을 높였다. iOS9에서 low powoer mode를 지원하여 불필요한 기능들을 제어할 수 있다. 아이클라우드 보안 강화했다. OS 설치 공간을 기존의 iOS8에선 4.6기가를 사용했지만 iOS9에서는 1.3기가만 사용한다.


Developers

45. GameplayKit : 게임 인공지능, Model I/O : 3D 모델링, ReplayKit : 사용자의 게임 영상을 저장/공유

46. HealthKit :  보다 다양한 항목들을 추가

47. HomeKit : 기존의 기온, 조명, 잠금을 비롯하여 창문, 보안 시스템, 모든 센서 등을 조정할 수 있도록 하였으며 아이클라우드를 통하여 조정가능하다. 당신이 어디에 있든 이용할 수 있다.

48. Car play : 더 다양한 종류의 자동차 화면을 지원한다. 별도의 연결없이 무선으로 지원이 가능해진다.

49. Swift 2 : 오늘부터 오픈소스가 된다.

50. Swift는 앞으로 iOS, OS X, Linux를 지원한다.

51. 앱스토어에서 1조개의 앱 다운로드가 이루어졌다.

52. 300억 달러를 개발자들에게 지불했다.






watchOS 2

53. 사진으로 시계 배경을 설정할 수 있다. 사진 앨범으로 자동 전환되는 시계 배경도 가능하며 세계 유명 도시들의 Time-Laps face도 지원한다.

54. Complications를 지원하여 시계화면에서 개발자들이 이용할 수 있는 공간을 제공한다.

55. 디지털 크라운을 움직여서 실제 예정 시간별로 일정 및 정보들을 알려준다. Time Travel이라고 불리는 기능이다.

56. night stand 모드를 지원하여 충전 중, 탁상 시계처럼 사용이 가능하다.

57. Friends에 여러 그룹을 설정할 수 있다. digital touch에서 다양한 색상을 지원한다. mail에 답장을 쓸수 있다. face time audio를 지원한다.

58. 시리를 통해 운동을 기록할 수 있다. 

59. Apple Pay를 Apple Watch에서 사용이 가능하다.

60. Maps에서 대중교통 안내를 지원한다. 

61. 시리를 통해 길 안내를 받을 수 있으며,  Home Kit을 이용할 수 있다. 

62. WatchKit은 App Logic을 아이폰에 의존하는 구조를 취했다. 하지만 앞으로 Watch App에서 독자적으로 App Logic을 구현하도록 한다. 

63. 아이폰이 없다면 와이파이에 직접 접속하여 이용할 수도 있다.

64. 마이크, 스피커, 비디오, Health Kit, Home Kit, 가속도계, 택틱 엔진, 디지털 크라운 등을 직접 앱에서 이용할 수 있다.

65. 개발자 베타는 오늘부터 이용 가능하다.


Apple Music

66. My Music : 아이튠즈에서 곡 검색이 가능하며 각 기기에 동기화 된다.

67. For You : 장르와 아티스트등을 고르면 전문가들이 엄선한 자신의 취향에 알맞는 재생목록 및 음악을 제공한다.

68. News : 새로운 곡들과 소식들을 접할 수 있다.

69. 24/7 Radio : 글로벌 라디오를 제공한다.

70. Connect : 아티스트와 팬들의 유대를 높이는 서비스를 제공한다. 사진, 가사, 음원, 비디오 등을 아티스트들이 공유하는 서비스이다.

'WWDC > 2015' 카테고리의 다른 글

[Apple] WWDC 2015 키노트 요약  (0) 2015.06.10
Function parameters
함수의 param들은 기본적으로 다 상수다. 그러므로 수정이 불가능하다. 함수 내에서 param을 수정하기 위해선 inout param으로 선언하면 되는데, 함수 선언부에서 param앞에 '&'를 표시해주면 된다.

Function type
function type을 다른 function의  param의 타입으로 사용할 수 있다. 함수의 타입이 들어가는 부분에  '(Int, Int) -> Int'와 같이 일반 함수 선언 부에서 함수명의 뒷부분을 적어주면 된다. function type을 사용해서 함수를 param으로 사용할 수 있다.

ex)
func addTwoInts(a: Int, b: Int) -> Int {
    return a + b
}

func printMathResult(mathFunction: (Int, Int) -> Int, a: Int, b: Int) {
    println("Result: \(mathFunction(a, b))")
}

printMathResult(addTwoInts, 3, 5)
// prints "Result: 8’

또, function type을 return  type으로 또한 사용이 가능하다. 함수 선언부에 return을 적어 주는 부분에 function type을 적으면 된다.

ex)
func stepForward(input: Int) -> Int {
    return input + 1
}
func stepBackward(input: Int) -> Int {
    return input - 1
}

func chooseStepFunction(backwards: Bool) -> (Int) -> Int {
    return backwards ? stepBackward : stepForward
}

var currentValue = 3
let moveNearerToZero = chooseStepFunction(currentValue > 0)
// moveNearerToZero now refers to the stepBackward() function

Closures
closure는 코드 상에서 나뉘어 있고 사용되는 기능을 스스로 내포한 블록이다. C와 objective-C의 block과 다른 언어의 lambda와 비슷하다. 다만, block과 closure의 다른 점은 block는 단순한 instruction의 모음 단위이다. closure는 실제로 block을 value로 소유한 객체라고 생각하면 된다. 간단한 예로 value를 block에서 쓰려면 block에서 사용한다는 표시하기 위해 '__block' 키워드를 사용하지만 closure는 실체를 가진 reference이므로 정의할 때 당시의 주변 context의 value 자체에 대한 refence count를 증가시켜 capturing이 가능한 것이다.

다른 개발자의 표현을 빌리자면 'closure는 함수 포인터와 비슷하지만 함수 포인터는 함수 내부의 변수만 접근이 가능한 반면 closure는 정의할 당시의 주변의 context의 변수 들에 접근이 가능하다'라고 서술되어 있다.

전역 함수와 중첩 함수도 closure의 유형으로 아래와 같다.

    • 전역 함수는 함수명을 가지지만 value를 capture하지 않는다.
    • 중첩 함수는 함수명을 가지면서 자신의 함수 중첩 내의 value를 capture할 수 있다.
    • closure는 이름을 가지지 않으며 주변의 context의 value를 capture할 수 있다.


closure의 capturing value에 관해서는 뒤에서 자세히 설명할 것이다. 먼저, closure의 syntax는 아래와 같다.

ex)
{ (parameters) -> return type in
    statements
}

'in' 키워드는 closure에서 param과 return의 선언이 끝나고 body가 시작됨을 알려준다. closure의 body는 너무 짧아 한 줄로 끝날수도 있으므로 'in'이라는 키워드를 사용하여 명시적으로 표시한다.

Operator function
closure의 축약형이다. 애플의 swift 서적의 예로 설명하면 아래와 같다. 먼저, 아래와 같은 closure가 존재한다.

ex)
reversed = sort(names, { (s1: String, s2: String) -> Bool in return s1 > s2 })

위에서와 같이 실행 단위를 block으로 묶어서 사용된다. 단, 위의 경우는 전역함수나 중첩 함수와 다르게 anonymous 형태로 사용되었다. 위의 closure를 단순화 시켜 최종적으로 operator function의 형태로 만들것이다. 우선, Swift에서 제공하는 sort 함수는 두번 째 param의 (String, String) -> Bool 임을 예측한다. 그러므로 function type은 생략한다.

ex)
reversed = sort(names, { (s1, s2) in return s1 > s2 })

'in' 키워드 뒤에 statement가 1줄이기 때문에 return statement가 올 것이라는 것을 예측할 수 있기 때문에 'return' 키워드를 생략한다.

ex)
reversed = sort(names, { (s1, s2) in s1 > s2 })

swift는 위와 같은 inline closure에 default param name을 제공한다. 그러므로 param name을 $0, $1, $2 ... and so on으로 대체 가능하다. 그리고 default param name을 사용할 경우 param의 선언부도 생략한다.

ex)
reversed = sort(names, { $0 > $1 })

여기서 추가적으로 swift에서 제공하는 String에서는 '>' operator에 대해서 추가 구현이 되어 있으므로 아래와 같이 축약이 가능하다.

ex)
reversed = sort(names, >)

실제로 operator에 관한 내용은 더 뒤에서 설명이 나오지만 짐작하건데 C++에서의 operator overloading과 비슷할 것으로 생각된다.

func : map -> call closure once each value in array
swift의 array 객체는 map이라는 method를 가진다. map 메소드는 array의 각 value마다 사용자가 정의한 closure를 호출하는 역할을 한다. 사용법은 아래와 같다.

ex)
let strings = numbers.map {
    (var number) -> String in
    var output = ""
    while number > 0 {
        output = digitNames[number % 10]! + output
        number /= 10
    }
    return output
}
// strings is inferred to be of type String[]
// its value is ["OneSix", "FiveEight", "FiveOneZero"]


capturing values in closure
closure는 자신이 정의된 곳의 context의 constant와 value들을 capture할 수 있다. 심지어 context의 scope를 벗어났을 때도 capture가 가능하다. 일반적인 중첩 함수로 makeIncrementor(forIncrement:)를 예로 들어보자. 지역 변수 'runningTotal'은 makeIncrementor가 가지는 scope 안에서만 유효하다.

ex)
func makeIncrementor(forIncrement amount: Int) -> () -> Int {
    var runningTotal = 0

    func incrementor() -> Int {
        runningTotal += amount
        return runningTotal
    }

    return incrementor
}

중첩 함수는 closure의 한 형태이다. 아래와 같이 makeIncrementor(forIncrement:)를 상수에 집어넣어 사용해보자. 비록 makeIncrementor(forIncrement:)가 실행되어 scope안에서만 'runningTotal'의 value가 유효하지만 closure이기 때문에 scope를 벗어나서도 'runningTotal'의 value는 유효하다. 이를 value를 capture했다고 한다.

ex)
let incrementByTen = makeIncrementor(forIncrement: 10)

incrementByTen()
// returns a value of 10

incrementByTen()
// returns a value of 20

incrementByTen()
// returns a value of 30

Enumeration
swift의 enum은 C와 obejctive-C와 달리 default로 integer값을 사용하지 않는다. integer 대신에 각 member를 구별할 수 있는 value를 사용한다.  아래의 syntax로 사용한다.

ex)
enum CompassPoint {
    case North
    case South
    case East
    case West
}

enum Planet {
case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}

enum : Associated values
associated value는 연관되어 있는 값들을 서로 다른 타입(양식)으로표현할 때 사용한다. 사용자가 정의한 타입으로 enumeration을 할 수 있다. 아래와 같이 UPCA와 QRCode로 사용자가 직접 enumeration 안에서 타입을 정의할 수 있고 분기문에서 사용 가능하다. 사용된 enum의 associated value는 constant로 사용한다. 

ex)
enum Barcode {
    case UPCA(Int, Int, Int)
    case QRCode(String)
}

var productBarcode = .QRCode("ABCDEFGHIJKLMNOP")

switch productBarcode {
case let .UPCA(numberSystem, identifier, check):
    println("UPC-A with value of \(numberSystem), \(identifier), \(check).")

case let .QRCode(productCode):
    println("QR code with value of \(productCode).")
}
// prints "QR code with value of ABCDEFGHIJKLMNOP."

enum : Raw values
associated value는 서로 다른 타입의 값을 표할 때 사용된다. 하지만 raw value는 모두 같은 타입의 enum member들을 사용할 때 사용한다. raw value를 사용하려면 enum을 정의할 때, 구체적인 타입을 아래와 같이 정의해주면 된다.

ex)
enum ASCIIControlCharacter: Character {
    case Tab = "\t"
    case LineFeed = "\n"
    case CarriageReturn = "\r"
}

또한 기존의 C와 objective-C처럼 integer로 이루어진 enum 선언도 아래와 같이 할 수 있다. 'Mercury'를 '1'로 정의하고 뒤에는 자동으로 '2, 3...'으로 정의된다.

ex)
enum Planet: Int {
        case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}


Structures and Enum is value type
Classes and Closures is reference type

syntax)
struct SomeStructure {
    // structure definition goes here
}

class SomeClass {
    // class definition goes here
}

NSArray & Array
NSDictionary & Dictionary
NSArray & NSDictionary는 클래스로 구현되어 있다. 하지만 Array & Dictionary는 구조체로 이루어져 있어서 value type을 가진다. 여기서 특이점은 Dictionary는 value type의 특징 대로 무조건 copy된다. 하지만 Array의 경우는 length의 변화가 없을 경우, copy를 하더라도 공유된 sequence를 가지게 된다. length가 변할 때 실제로 물리적 copy를 수행하게 된다. 만약에 Array를 sequence를 공유하디 않고 애초에 물리적 copy를 하고 싶을 때는 아래와 같이 unshare() 혹은 copy()를 사용하면 된다.

ex)
var unsharedNames = names.unshare()
var copiedNames = names.copy()

unshare()는 호출 당시에는 물리적 copy를 수행하지 않지만 Array의 length 이외의 변화가 생길 때에도 즉시 물리적 copy를 수행한다. copy()는 호출과 동시에 물리적 copy를 수행하게 된다.


You can use (===, !==)
swift에서는 삼등연산자를 사용가능하다. 객체를 상대로 사용할 경우, 객체가 같은 클래스로 생성되었는지 아닌지를 구분할 수 있다. Array에 사용할 경우 Array 내부의 value들이 같은지 아닌지를 확인 할 수 있다.

Lazy property
lazy property는 실제로 property에 접근하여 read를 하기 전까지 불필요한 property의 초기화를 하지 않는다. 사용할 때는 아래와 같이 '@lazy'를 붙여주면 된다. 참고로 conatant property는 lazy property로 사용이 불가능하다.

ex)
class DataImporter {
    /*
    DataImporter is a class to import data from an external file.
    The class is assumed to take a non-trivial amount of time to initialize.
    */
    var fileName = "data.txt"
    // the DataImporter class would provide data importing functionality here
}
 
class DataManager {
    @lazy var importer = DataImporter()
    var data = String[]()
    // the DataManager class would provide data management functionality here
}
 
let manager = DataManager()
manager.data += "Some data"
manager.data += "Some more data"
// the DataImporter instance for the importer property has not yet been created

println(manager.importer.fileName)
// the DataImporter instance for the importer property has now been created
// prints "data.txt"

위의 예시를 통해서 볼 경우, 제일 하단의 'println(manager.impoter.fileName)'이 호출되어 read가 일어나기 전까지 lazy property인 manager.importer의 초기화는 이루어지지 않는다.

Computed property
computed property는 실제 물리적인 값을 가지진 않고 오로지 getter와 setter를 가진 property를 말한다. 아래의 예시를 보면 이해가 바르다.

ex)
struct Rect {
    var origin = Point()
    var size = Size()
    var center: Point {
    get {
        let centerX = origin.x + (size.width / 2)
        let centerY = origin.y + (size.height / 2)
        return Point(x: centerX, y: centerY)
    }
    set(newCenter) {
        origin.x = newCenter.x - (size.width / 2)
        origin.y = newCenter.y - (size.height / 2)
    }
    }
}

위와 같이 property center는 실제로 물리적인 value를 가지고 있지 않지만 getter와 setter를 통한 접근이 가능하다. 이를 computed property라고 한다. setter를 정의하지 않을 경우, read only property로 사용되며 아래와 같이 getter라고 정의할 필요없이 간단하게 사용 가능하다.

ex)
struct Cuboid {
    var width = 0.0, height = 0.0, depth = 0.0
    var volume: Double {
    return width * height * depth
    }
}

Property observer
objective-C의 KVO와 비슷한 기능을 가진 친구이다. 'willSet()'과 'didSet'을 통하여 property의 value에 set이 발생할 때마다 수행할 로직을 정의할 수 있다. 심지어 같은 값을 set해도 호출된다. overrinding한 property에도 사용할 수 있다. 사용방법은 아래와 같다.

ex)
class StepCounter {
    var totalSteps: Int = 0 {
    willSet(newTotalSteps) {
        println("About to set totalSteps to \(newTotalSteps)")
    }
    didSet {
        if totalSteps > oldValue  {
            println("Added \(totalSteps - oldValue) steps")
        }
    }
    }
}

Type property & method
type property와 type method는 Java에서 static property와 method를 말한다. 실제의 객체가 없어도 사용 가능한 property와 method이다. 사용 법은 아래와 같다. struct와 enum에서 사용될 때는 'static'키워드를 사용하고 class에서 사용될 때는 'class'라는 키워드를 사용해주면 된다.

ex)
struct SomeStructure {
    static var storedTypeProperty = "Some value."
    static var computedTypeProperty: Int {
    // return an Int value here
    }
}
enum SomeEnumeration {
    static var storedTypeProperty = "Some value."
    static var computedTypeProperty: Int {
    // return an Int value here
    }
}
class SomeClass {
    class var computedTypeProperty: Int {
    // return an Int value here
    }
}

Mutating
구조체와 enum은 value type을 가지기 때문에 instance method를 통한(type method 말고) 내부 value의 변경이 불가능하다. 하지만 method 앞에 'mutating'이라는 키워드를 사용할 경우, 내부 value의 변경이 가능한 mutating method를 정의할 수 있다. 또한 내부의 value뿐만 아니라 self를 사용하여 구조체와 enum의 자신의 개체 마저도 변경이 가능하다. 

ex)
‘struct Point {
    var x = 0.0, y = 0.0
    mutating func moveByX(deltaX: Double, y deltaY: Double) {
        self = Point(x: x + deltaX, y: y + deltaY)
    }
}

enum TriStateSwitch {
        case Off, Low, High
        mutating func next() {
            switch self {
            case Off:
                self = Low
            case Low:
                self = High
            case High:
                self = Off
            }
    }
}

Subscripts
subscript는 class, struct, enum에서 정의 가능하다. subscript는 array나 dictionary와 같이 index나 key를 가지고 value를 querying하는 것을 가르킨다. subscript를 이용해서 class, struct, enum에서도 index를 통한 value의 querying이 가능하다. syntax는 computed property와 비슷하다. 2개의 예제 중 아래는 read-only subscript이다.

ex)
subscript(index: Int) -> Int {
    get {
        // return an appropriate subscript value here
    }
    set(newValue) {
        // perform a suitable setting action here
    }
}

subscript(index: Int) -> Int {
        // return an appropriate subscript value here
}

아래와 같이 실제 사용의 예를 보면 class, struct, enum도 array, dictionary와 같이 index를 통한 querying을 사용할 수 있다. 또한 index로 사용할 param을 variable param 혹은 variadic param으로도 사용 가능하나 in-out이나 defalut param으로는 사용 불가능하다.(기억이 안난다면 1주차 요약 참고) input param과 return type에는 제한이 없다.

ex)
struct TimesTable {
        let multiplier: Int
        subscript(index: Int) -> Int {
            return multiplier * index
        }
}

let threeTimesTable = TimesTable(multiplier: 3)
println("six times three is \(threeTimesTable[6])")
// prints "six times three is 18"


Preventing overrides
상속을 할 때, 상속을 허용하지 않을 property 혹은 method는 앞에 '@final'이라는 키워드를 사용하면 된다. Java를 사용해본 개발자라면 표현이 익숙할 것이다.

Initializer (init)
Initializer에서 모든 property를 초기화해야만 컴파일 가능하다. Initailizer내에서의 method 호출은 모든 property(Optional 제외, 엄밀히 말하면 optional은 nil로 초기화됨)를 초기화하고 나서 가능하다.

Designated & convenience initializer
Designated initializer는 모든 property 초기화하고 모든 클래스가 최소 1개 이상을 가진다. 반면, Convenience initializer는 보조 initializer이기 때문에 굳이 필요하지 않으면 만들지 않는 것이 좋다. 사용할 때는 'convenience' 키워드 사용한다. syntax는 아래와 같다.

ex)
Designated initializer
init(parameters) {
    statements
}

Convenience initializer
 convenience init(parameters) {
    statements
}

Initailizer chaining 
Initializer의 작은 규칙 몇 가지가 따른다. 구현에 앞서 이를 숙지하면 아~~주 좋다.
  1. Designated만 상위클래스의 Designated를 호출
  2. Convenience만 같은 클래스 내의 다른 생성자를 호출
  3. Convenience는 최종적으로 Designated를 호출하며 끝날 것


위의 이미지와 같이 designated는 오로지 슈퍼 클래스의 designated만을 호출할 수 있다. convenience만 다른 생성자들을 호출이 가능하다. 객체가 실제로 물리적 초기화가 되는 시점은 designated가 호출되는 시점이다. initial logic이 중첩되는 다양한 customized initializer를 사용할 경우엔 convenience를 이용하자. 굳이 필요하지 않으면 안 쓰는 것이 좋다.



참고 : Apple Inc. ‘The Swift Programming Language.’



-Mac OS X Yosemite

  1. 8천만대에 OS X가 설치되어 있다.
  2. 4천만대에 매버릭스 설치되어 있다.
  3. OS X는 최신 버전 설치 비율이 51%이고 윈도우는 14%에 불과하다
  4. Mavericks에 이어 새로운 OS X의 이름을 찾기 위해 마케팅 팀은 동분서주했다. Oxnard, Rancho cucamonga, Weed 등을 고려한 결과, Yosemite로 새로운 이름을 정했다.
  5. 기존 OS X는 아쿠아 디자인을 사용해왔다. 깔끔하고 플랫한 UI로 교체했다. 메뉴바는 반투명처리하여 스크롤을 하면 컨텐츠에 따라 색이 변한다. dark모드를 지원한다. 메뉴바와 독 등이 검게 표시된다.
  6. 알림센터는 검은 UI를 사용했고 Today view를 추가하여 캘린더, 리마인더, 날씨 등을 표시해준다. 위젯(계산기, 스포츠 정보 등)을 앱스토어에서 다운로드 받아서 Today view를 통한 이용이 가능하다.
  7. 스팟라이트의 서치바가 가운데 표시된다. 로컬 도큐먼트(문서, 연락처, 앱 등) 뿐만아니라 인터넷의 정보(위키, 지도, 영화, 인터넷 뉴스 등)도 검색할 수 있다.
  8. iCloud drive를 지원한다. 파인더로 접근하여 어떤 파일이든 저장 가능하다. iOS와 윈도우에서도  iCloud drive로 접근 가능하다.
  9. OS X의 메일 클라이언트가 업데이트 됬다. 메일을 보낼 때, 첨부파일은 iCloud 서버를 통해 보내져 첨부 파일의 용량이 커도 메일서버와 상관 없이 전송이 가능하다.(Max : 5GB)
  10. 메일 클라이언트를 이용해 이미지에 선을 긋거나 PDF에 사인을 하는 등의 추가적 기능을 사용할 수 있어 편리해졌다.
  11. 사파리의 서치바에서 스팟 라이트와 같이 관련 정보(위키, 지도, 영화, 인터넷 뉴스 등)를 바로 검색가능하다.
  12. 사파리에서 여러 탭을 열면 탭들을 스크롤이 가능하도록 바꿨다.
  13. 사파리에서 탭뷰를 통해 모든 탭의 내용을 한눈에 확인이 가능하다.
  14. 프라이빗 윈도우를 통해 개인정보 보호 브라우징이 가능하다.
  15. Air drop이 iOS와 맥 사이에 가능해졌다.
  16. hand off라는 기능이 추가 됬다. hand off는 편집 중인 문서를 근처에 있는 자신의 iOS 기기에서 그대로 이어서 가능하게 해준다. 문서뿐 아니라 메일 작성도 hand  off를 통해 맥과 iOS간에 이용이 가능하다.
  17. instant hotspot으로 자신의 아이폰이 근처에 있다면 암호를 치거나 별도의 설정 없이 바로 핫스팟을 이용 가능하다.
  18. SMS 메시지 또한 맥에서 확인이 가능하며 전화를 받거나 걸수도 있다. 웹페이지에 표시된 전화번호로 별로의 입력 없이도 바로 전화를 걸 수 있다. (Dr. Dre한테 전화 걸었음 ㅋ)
  19. 요세미티는 개발자들에게 6/2부로 공개된다. 베타 프로그램을 통해 일반 사용자도 프리뷰 버전 이용이 가능하다. 정식 버전은 가을에 무료로 공개된다.




-iOS 8

  1. 전세계적으로 아이팟 터치는 1억개, 아이패드 2억개, 아이폰 5억개가 사용 중이다.
  2. 작년에 1억 3천만명의 신규 고객이 유입됬다.
  3. iOS7의 고객 만족도가 97%에 육박한다.
  4. 전체 iOS기기 중에 최신 버전인 iOS7의 비율은 89%이다.
  5. 안드로이드는 최신 버전인 킷캣의 비율이 9%에 불과하다.
  6. 안드로이드는 멀웨어 비율이 99%에 가까워 멀웨어 마켓(구글 플레이 비판)을 운영중이다. (또한 안드로이드 파편화를 비판)
  7. iOS8에서는 알림이 뜨면 화면의 전환이 없이 바로 답장이 가능하다. 잠금화면에서도 바로 작성이 가능하다. (interactive notification)
  8. 더블 탭을 해서 표시되는 멀티태스킹 화면에서 연락처 기록이나 즐겨찾기 목록을 볼 수 있다.
  9. 아이패드에서 사파리를 이용할 때 맥에서 처럼 사이드바 이용이 가능하다.
  10. 메일 클라이언트에서 메일을 스와이프하면 '삭제', '메일함 이동' 등의 메뉴를 바로 사용이 가능하다. 아이패드에선 메일 작성 중일 때, 작성중인 메일을 제스처를 통해 내려주면 작성과 동시에 메일함 확인이 가능하여 메일함의 컨텐츠를 바로 작성중인 메일에 첨부 가능하다.
  11. iOS의 스팟 라이트도 맥과 같이 업데이트하여 인터넷 정보(스포츠, 영화, 음악, 앱스토어 등)을 검색 가능하며 사파리의 서치바에서도 별도의 인터넷 정보를 이용 가능하다.
  12. Quick type을 지원하여 사용자가 입력하는 단어를 미리 예측하여 제안 해준다. 이를 통해 보다 빠른 입력이 가능해진다. 단어를 예측하는데 쓰여지는 정보들은 로컬에 안전하게 저장되어 프라이버시를 존중해 준다. (한국어는 아직 지원이 안됨)
  13. Mac OS X에서 설명한 기능들 다시 언급 (hand off, SMS, Phone call, instant hotspot)
  14. iMessage의 그룹 메시징 기능에서 그룹의 이름을 변경 가능하며 다른 사람을 초대하거나 제거할 수 있다. 해당 그룹 방의 알림을 안 받게 설정 할 수 있으며 그룹방에서 나가는 기능들을 이용할 수 있다.
  15. iMessage를 통해서 음성 메시지, 비디오 등을 편리하게 보낼 수 있도록 전송 버튼을 개선했다.
  16. interactive notification을 통해서도 음성 메시지를 확인 가능하며 바로 보낼 수도 있다.
  17. iCloud drive를 통해서 드라이브에 저장된 파일들을 여러 앱을 통해서 열 수 있다. 이는 앞에서 설명한 바와 같이 맥과 윈도우에서도 사용 가능하다.
  18. Enterprise 기능이 강화되다. data protection은 물론, 이메일 보안 까지 신경썼다. Exchange 계정을 사용하는 사람은 iOS기기로부터 보내지는 자동 답장 기능을 설정할 수 있다. 캘린더에서는 이벤트 추가시 기존의 다른 일정과 충돌할 경우, 이를 즉시 알려줘 스케줄 관리를 도와준다.
  19. Health Kit이 추가됬다. 활동과 건강에 관한 정보를 모니터하고 Health 앱에 기록한다. Health와 관련된 앱에 Health정보를 제공 가능하다. 이는 운동 뿐만아니라 의료 정보로도 이용이 가능하다.
  20. Family sharing 기능이 추가됬다. 사진, 캘린더, 리마인더, 위치, 미디어(음악, 영화, 책, 앱 등)를 편리하게 공유한다. 6명까지 가족 멤버로 등록 가능하며 결제를 위한 신용카드도 공유 가능하다. 아이가 결제를 할 경우, 부모에게 결제에 관한 권한 요청 메시지를 보내게 된다.
  21. 사진 라이브러리에 검색 기능이 추가 됬다. 날짜, 위치, 앨범 이름으로 검색이 가능하다. 스마트 컨트롤을 통해 더욱 세밀한 사진 편집(밝기, 대조, 노출, 채도 등)이 가능해진다. 사진 밑의 하트 버튼을 누르면 모든 기기의 포토 라이브러리에서 실시간으로 사진이 동기화된다. iCloud를 이용한 사진, 비디오의 동기화는 포맷과 해상도에 상관없이 모두 가능하다. 5GB까지는 무료이며 20GB는 $0.99/month, 200GB는 $3.99/month이며 1TB까지 이용가능하다.
  22. 시리의 기능이 향상되었다. 차에 연결 되어있으면 “hey~ siri”를 통해 이용이 가능하다. 음악 인식/검색이 가능하다. iTunes 컨텐츠를 검색이 가능하다. 중국에 대해 지도와 turn by turn navigation이 업데이트 됬으며 음력 달력도 지원된다.




-for developers 

(Swift, Cloud kit, Home kit, Health kit, Metal, Sprite kit, Scene kit, Touch ID and various API)

  1. 120만개의 앱이 사용되고 있다. 매 주 3억명이 앱스토어에 방문한다. 750억의 앱이 다운로드 되었다.
  2. 앱스토어에 explore 탭을 추가하여 유저가 카테고리와 서브카테고리를 통해 앱을 더욱 많이 검색할 수 있다. 트렌딩 서치를 추가, 검색 결과는 스크롤이 가능하며 연관 검색 또한 제공한다. Editor’s choice 로고를 통해 최고의 앱을 선택할 수 있게 도왔다. ‘앱 번들’을 통해 여러 앱을 싸게 한번의 탭으로 구입할 수 있도록 했다. 또한 앱 프리뷰에 비디오를 올릴 수 있다. 
  3. 'TestFlight’라는 서비스를 시행한다. 베타 테스터를 초대해서 테스트 앱 배포가 자유로워졌다. (기존의 test flight를 변형한 서비스)
  4. 4000여 개의 새로운 API가 추가되었다.
  5. 각 앱은 샌드박스를 통해 각자의 데이터를 보호하고 공유할 수 없었다. 하지만 iOS를 통해 각 앱에 브릿지를 연결할 수 있도록 제공한다. 이를 통해 Sharing, Action, Photo filter, Documents, Widgets in notification center(today view)등의 Built-in을 통한 앱의 이용이 가능해 졌다.
  6. 키보드를 개발자가 만들어 넣을 수 있다. default 설정으로는 네트워크의 접근이 불가능하지만 사용자의 동의를 구하면 네트워크로의 접근도 가능하다.
  7. Touch ID가 API로 공개된다. 지문 정보는 각 앱의 로컬 데이터로 저장 된다. 저장된 지문 정보는 다른 앱은 물론이고 iOS에서도 Touch ID 데이터에 접근이 불가능하게 보호된다.
  8. camera API를 제공하여 사진의 수동 조작이 가능하다. Photo kit API를 이용해 성능을 높였고 라이브러리에 사진을 저장하고 로딩할 수 있다. 클라우드 라이브러리에도 가능하다. 사진 데이터를 손상시키지 않고도 편집이 가능하다.
  9. Health kit은 앞서 설명했다.
  10. Home kit을 공개했다. 이를 통해 집의 전등, 도어락, 웹캠 등을 조작 가능하다. 보호된 페어링을 제공하며 Siri를 내장한다. 여러 장비를 그룹핑하여 조작도 가능하다.
  11. Cloud kit을 통해 서버 사이드 앱과 클라이언트 사이드 앱 중 서버 사이드의 기능을 구현 가능하다. 아이클라우드 인증, 저장소, 데이터베이스, 검색 및 알림 등의 기능을 이용 가능하다. 또한, Cloud kit은 무료이다. 단, 1PB의 리소스 저장소, 10TB의 데이버베이스, 5TB/day의 리소스 전송과 50GB/day의 데이터베이스 전송으로 제한된다.
  12. Metal 이라는 3D graphic을 제공한다. open GL은 하드웨어와 게임 사이에 아주 두꺼운 장벽이 되어 성능을 저해했다. 하지만 Metal은 게임과 하드웨어의 접근성을 향상시켜 10배의 성능 향상을 가져온다. 오버헤드를 줄이고 멀티스레딩의 효율성을 제고시켰다. Metal은 A7칩을 위해 설계됬다.
  13. 캐쥬얼 게임을 위해 작년에 공개한 Sprite kit의 기능을 강화했다. 소스를 가볍게 만들고 각 픽셀-물리엔진, 운동역학을 적용했다. Scene kit을 추가로 공개한다. 이를 이용하면 3D scene 렌더링이 가능하다. 캐쥬얼 게임을 위해 개발됬다. 물리엔진과 파티클 시스템, scripted action을 지원한다.
  14. 다음은 Xcode이다. 최신 버전(Xcode5)은1400만의 다운로드가 이루어졌다. Objective-C는 20여년간 사용되어 왔다. 우리는 C가 없는 Objective-C를 상상해왔다. 새로운 프로그래밍 언어를 공개한다. Swift!! 
  15. Swift는 빠르고 현대적이며 안전하다. 그 어떤 플랫폼에서도 볼 수 없었던 상호작용하는 개발을 지원한다. Swift는 복잡한 객체 정렬에 있어서 파이썬보다 3.9배(Objectvie-C의 2.8배) 빠르다. RC4 encryption은 파이썬보다 220배(Objectvie-C의 127배) 빠르다. type interface, generic, closures, name spaces, multiple return types 등을 지원한다. Swift는 문법을 간소화하고 일반적으로 실수하는 프로그래밍 에러들(포인터, 버퍼 오버플로우, 초기화하지 않은 변수 등등)을 방지하기 쉽게 만든다. cocoa/cocoa touch를 이용한다. LLVM 컴파일러로 빌드된다. ARC를 차용하고 Objective-C와 같은 런타임을 사용한다. 
  16. Playground라는 것을 제공하여 설계 구현을 편리하게 만들었다. 변수나 이미지 등의 리소스를 다이나믹하게 즉시즉시 확인 가능하다. 루프의 값의 변화와 시간 측정이 가능하며 코드를 바꾸면 빌드할 필요 없이 그에 따른 응답을 즉각 보여준다. Sprite kit, Scene kit 등을 이용한 게임도 즉각적으로 프로그램의 성능을 확인할 수 있다. 시간에 따른 게임의 실행 또한 확인이 가능하다. (자세한 것은 Demo 참고)
  17. Swift는 cocoa/cocoa touch를 지원한다. Xcode에서 완벽하게 지원한다. Swift가이드는 웹사이트와 iBooks를 통해 볼 수 있다. 새로운 iOS와 OS X가 공개되는 날부터 Swift로 개발된 앱을 앱스토어에 등록 가능하다.


What is new in OS X 10.10 : https://developer.apple.com/library/prerelease/mac/releasenotes/MacOSX/WhatsNewInOSX/Articles/MacOSX10_10.html#//apple_ref/doc/uid/TP40014484-SW1


What is new in iOS8 : https://developer.apple.com/library/prerelease/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS8.html#//apple_ref/doc/uid/TP40014205-SW1


About Swift : https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/

'WWDC > 2014' 카테고리의 다른 글

[Apple] WWDC 2014 키노트 요약  (0) 2014.06.04

CPU 벤더들의 클럭 경쟁에서 멀티코어 형태의 경쟁으로 패러다임이 바뀐 지금. 서버 뿐 아니라 PC 그리고 모바일 단말에 사용되는 OS는 프로그래머들에게 멀티 코어 프로세싱을 지원해 줘야하는 숙명을 가지게 되는데..


이에 애플은 스노우 레오파드를 발표할 때 두가지 큰 기술을 개발자들에게 선물했다.

하나는 GCD (Grand Central Dispatch), 나머지 하나는 OpenCL 이다.


      GCD는 쉽게 말해 멀티코어 프로세서를 위한 Thread 프로그래밍을 OS에서 자동 관리 / 분배 해 주는 Mac OS에 내재된 C Library이다.  이말은 즉 프로그래머에게 자신이 만든 Thread를 어떻게 멀티코어 프로세서에 분산 시킬 것인가에 대한 고민을 없애 주었다는 말이다.  이 이야기는 나중에 보다 심도 있게 설명하겠다.

 

      OpenCL은 재밌는 개념인데, 남아도는 GPU의 코어들을 일반 컴퓨팅 연산에 사용 할 수 있게 지원하겠다는 말이다. 게다가 남아도는 CPU 코어도 같이 ! (아직 GCD와 OpenCL은 유기적으로 연계 된 것 같지는 않다.  내 개인적 추측으로는 Lion 혹은 그 이후에 유기적으로 연계된 GCD와 OpenCL을 보게되지 않을까 생각된다.)


       사실 GPU는 요즘 200개가 넘는 코어를 가지고 오직 그래픽 프로세싱을 위해서만 사용되는 정말 강력한 프로세서 유닛이다. 하지만 일반 프로그래머들에게는 CPU의 SSE류의 인스트럭션셋을 부동소스점 연산을 위해 꾸역꾸역 쓰던것만 허용되었다. 하지만 이제는 애플이 이러한 한계를 풀려고 작정을 한 것 같다. 이제는 프로그래머들이 컴퓨팅 연산을 위해  규격화된 표준 명령어 셋으로 CPU와 GPU의 멀티 코어를 자유롭게 쓸 수 있게 되었다.

이 자료에서는 위의 두가지 멋진 기술중 GCD에 포커스를 맞춰 기술하겠다.


참고 :  만약 시간의 여유가 된다면 아래의 동영상 자료를 보기 바란다. GCD와 OpenCL의 놀라운 마술을 볼 수 있다.
https://www.youtube.com/watch?v=nhbA9jZyYO4

 

1. GCD 소개

      사실 OS에서 지원하는 멀티코어 프로세싱은 애플에게만 있는것은 아니다.

이미 오래전부터 Parallel Programming을 지원하는 OS는 서버쪽으로 시작하여 윈도우 .NET  Framework 4.0의 TPL(Task Parallel Library) 그리고 Java 역시 JDK 7에 Fork/Join Framework를 포함한 JSR166y 등을 통해 멀티코어 프로세싱 프로그래밍을 지원한다.  그리고 정말 오래된, 애플의 오래전 경쟁자였던 BeOS까지..

새로운 기술은 아니지만 지금 애플에서는 GCD를 강력하게 밀고 있다.

이는 다음과 같은 이유에서다.


  • 기존의 어플리케이션은 자체 스레드를 사용하여 개발되었기 때문에 멀티코어 프로세서에 최적화 되지 못하였다.
  • 개발자는 단 몇줄의 코드 추가로 애플 OS단에서 지원하는 멀티코어 프로세서에 최적화된 어플리케이션을 만들 수 있다.
  • 이렇게 어플리케이션 코드를 변경해 놓으면 앞으로 CPU에 코어가 몇개가 붙던 알아서 OS단에서 멀티코어 프로세싱을 지원해 준다.
  • 그러므로 지금부터 GCD를 배워라.

      이것이 지금 우리가 GCD를 공부해야 하는 이유이다. 실제로 2장에서 GCD의 사용 예제를 보게 될 텐데 정말 기존 코드에 몇줄의 GCD코드 삽입으로 멀티코어 프로세싱이 지원되는것을 확인 할 수 있다.

      사실 애플은 iOS4.0부터 GCD를 기본 프레임웍에 포함 시켰다. 그리고 그 이전에는 GCD의 Object-C wrapper class인 NSOperation 및 NSOperationQueue 라이브러리 셋을 iOS2.0 시절부터 지원하였다. 재밌는건 iOS4.0이 발표되던 시절 애플의 어떤 모바일 단말에도 듀얼 코어가 실리지 않았었다.

GCD의 주요 목적은 딱 두가지 이다.


  1. MAC OS에서 비치볼 혹은 iOS에서 스크린 프리징을 없애는 것 !
  2. OS단에서  하나 이상의 CPU 코어에 Thread를 고루 분산 시켜 주는 것 !

      그럼 애플 OS는 어떻게 이러한 Thread를 여러개의 코어에 고루 분산시켜 주는지 살펴 보자.

      OS에는 하나 이상의 어플리케이션이 구동되며  각 어플케이션은 여러개의 Thread를 하나의 CPU에 처리 요청하게 된다. 코어가 하나인 CPU는 꾸역꾸역 이러한 Thread Task List를 수행하겠지만 아무래도 워커 스래드의 양이 많아 지거나 여러개의 어플리케이션이 동시에 heavy thread들을 task list에 등록한다면 어플리케이션들의 속도는 점점 느려지게 될 것이다.  예전에는 이를 해결하기 위해 CPU 클럭을 높였지만 지금은 CPU 코어 수를 늘린다. 그럼 OS는 어떤 숙제를 가지게 될 까?

      하나의 코어에서 수행되던 Thread들을 여러개의  코어로 고루 분산 시켜서 빠르게 Thread task list를 비워 나가게 지원해야 한다. OS는 유휴 코어를 체크 하고 스케줄링하며 이러한 일들을 윈할히 처리해 나갈 것이다. 그런데 또 다른 문제가 있다.


      어플들이 서로 Thread를 처리하기 위해 CPU를 차지하고 사용하려 한다면 ?

지금까지의 pthread 기법에서는 이러한 문제를 해결하기 무척 힘들다. 그럼 어떻게 프로그래머는 CPU의 유휴 코어를 탐지하고 다른 어플들에게 피해를 주지 않으면서 멀티코어 프로세서를 지원하는 Thread 프로그래밍을 할 수 있을까?


CPU의 유휴 코어를 누가 알겠는가?

지금 어떤 어플케이션이 CPU 코어를 점유 하고 있는지 누가 알 수 있나 ? 바로 OS이다.



프로그래머는 그냥 OS에 Task 코드 블럭만 넘기면 OS가 알아서 어플들의 Task들에 우선권 조정을 하고 Thread를 스마트하게 만들어줘서 유휴 코어에 할당하는 것이다.

게다가 Thread 풀링을 사용하여 Thread자원을 재사용까지 하면서…



      이것이 GCD의 핵심 기술이다. 예전 NSOperationQueue에서 Queue를 사용한 것 처럼 프로그래머는 GCD Queue를 이용하여 Task를 Queue에 전달하면 그걸로 끝이다.

정말로 이걸로 끝이다. 나머지는 애플 OS가 다 알아서 해준다. 어플들간의 Task 조율 부터 Thread 만들기, 유휴  코어에 Thread 배정하기, Thread 풀링으로 재사용 하기 등등.

프로그래머는 지겨운 Thread 프로그래밍을 할 필요가 없어 졌다.

      나중에 GCD코드를 보겠지만 소스 코드에 Thread 관련 코드가 완전히 없어져 버렸다.

그럼 GCD 를 어떻게 사용하는지 살펴 보자.


2. GCD 사용법

      CGD를 사용하려면 우선  Block 코딩에 익숙해 져야 한다. 안드로이드 프로그래밍을 할 때 Block은 자연스러운 코딩 방법이었지만 iOS에서는 4.0부터 Block코딩을 지원하기 시작하였다. 사실 나도 왜 Block코딩을 여지껏 지원안했는지 정말 궁금했었다. 그런데 애플은 이미 자기네들은 내부에서 C Level의 Block 코딩을 하고 있었던 거였다. 젠장.

LLVM 근간의 CLang 컴파일러 공식 지원이 그 첫번째 이고, 이미 NSOperation은 iOS2.0 때부터 지원되었던게 그 두번째 증거일 것이다.

      사실 Object-C를 지원하는 애플이 Block 코딩을 지원하는게 그닥 탐탁치만은 안았겠지만 이제는 C base Library인 GCD를 표면적으로 지원해야하니 어쩔 수 없이 Object-C에도 블럭 기법을 추가하게 된 것이다. 도랑 치고 가재 잡는 형상이 되 버린거 같다.

그럼 블럭 코딩에 대해 먼저 살펴 보자.


Block Coding

      “ 블록은 포인터형 함수가 아닌 오브젝트형 함수다” 라는 뜻만 알면 블럭코딩에 대해 모두 안다고 할 수 있다. 포인터형 함수를 스래드에 매칭한다고 가정해보자. 우선 여러 스래드에서 해당 함수를 호출하면 스래드들은 해당 함수 코드 블럭이 존재하는 포인터를 참조하게 된다. 만약 해당 함수에서 전역변수를 사용한다면? 그럼 thread-safe를 위해 lock나 mutual exclusion 코딩이 추가 되어야 할 것이다. 만약 유연한 함수 코드를 지원하기 위해 아규먼트를 사용한다면?  함수 블럭 코드의 유연성을 지원하기 위해 아규먼트의 수량이나 복잡도가 증가하게되고 이는 특정 컨텍스트 관리를 위한 로드 증가 및 콜백 관련 코딩이 지원되어야 하는 고통이 수반될 것이다. 오브젝트형 함수인 블럭은 해당 코드 블럭들을 Thread에서 호출할 때 각각 메모리 상에 로드해 놓음으로서 위의 문제를 조금 간단하게 우회시켜 버렸다. 애플에서는 다음과 같이 블럭을 설명하고 있다.


  • Start out on stack – fast!
  • Blocks are objects!
  • Can be copied to heap!

또한 다음과 같은 경우에 블럭을 사용하라고 권장하고 있다.


  • Enumerations
  • Callback notifications
  • With GCD, moving work off the main thread
  • With GCD, mutual exclusion, concurrency

블럭의 시작은 ^ 으로 시작된다. 이는 마치 포인터의 *를 사용하는 것과 비슷하다.

간단한 블럭 함수 선언과 실행절에서의 사용법은 다음과 같다.


선언절  (void (^)(void))                         (void (^)(BOOL finished))

실행절  ^{ ……}                                      ^(BOOL finished) { …….. }

사용예제는 다음과 같다.

 

 

      위의 예제를 실은 이유는 코드블럭에 이름을 지어주는 방법에 대해 설명하고 싶어서이다. 그럼 GCD의 사용법에 대해 알아 보자. 아래의 예제는 일반적인 Objective-C 코딩이다.



1 2 3 4 5 6 7 
-(void) processImage:(UIImage *) Image { UIImage *processedImage = [ImageHelper doProcessing:Image]; [galleryView setImage:processedImage]   ; }


      간단하게 이미지를 전달받아 이미지 프로세싱을 한 후 이를 갤러리 뷰에 표시해주는 코드 블럭이다. 이 프로그램 코드의 문제는 무엇일까? 바로 이미지 프로세싱을 하는 동안 화면 프로세스는 죽을 수 있다는 것이다. 즉 시쳇말로 화면이 얼어 버릴 수 있다.

왜 그럴까?

      이유는 워커 스래드를 메인 스레드 상에서 처리하기 때문이다. 프로그램 코드에서 메인 스레드와 워커 스레드를 분리해야 할 것이다. 그럼 위의 예제를 Thread 프로그램으로 다시 구성해 보자.



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 
UIImage *Image = nil;   ....   [NSThread detachNewThreadSelector:@selector(processImage:) toTarget:self withObject:Image];   -(void) processImage:(UIImage *) Image { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; UIImage *processedImage = [ImageHelper doProcessing:Image]; [self performSelectorOnMainThread:@selector(showImage:) withObject:processedImage waitUntilDone:YES]; [pool release];   }   -(void) showImage:(UIImage *)Image { [galleryView setImage:processedImage]   ; }


      위의 예제는 워커 스레드 정의(이미지 프로세싱) 및 워커 스래드 함수 호출( Thread 호출) 그리고 메인스레드로 작업 넘기기(갤러리뷰에 이미지 보이기) 등의 코드로 구현하였다.

위와 같이 Thread프로그래밍을 하면 적어도 화면이 어는 현상은 없어진다. 하지만 여전히 문제는 있다 과연 여기서 멀티코어 프로세서를 어떻게 지원할 것인가 ? 막막하다. 그러려면 왠지 코드가 복잡하고 코드 양도 많아질거 같다. 하지만 아래의 GCD 적용 코드를 한번 살펴보자.



1 2 3 4 5 6 7 8 9 10 11 12 
- (void) processImage:(UIImage *) Image {   dispatch_async(dqueue, ^{ UIImage *processedImage = [ImageHelper doProcessing:Image]; dispatch_async(dispatch_get_main_queue(), ^{ [galleryView setImage:processedImage]   ; }); }); }


      단 두줄 추가하였다. 이렇게 함으로써 멀티코어 프로세서가 지원되는 Thread 프로그램을 만든 것이다. Thread보다 쉽지 않은가? 적어도 나는 NSThread나 NSOperation보다는 간편하였다. 물론 위의 코드는 단적인 예이다. 하지만 대부분의 GCD 코딩은 위의 예제만 습득하여도 충분히 사용 가능하리 만큼 강력 했다.


GCD Queue에 대하여

GCD의 시작과 끝은 GCD Queue로 시작해서 끝난다라고 얘기해도 과언이 아닌거 같다.

그만큼 GCD Queue가 중요한데 그 이유는 다음과 같다.


  • 프로그래머는 테스크를 정의하고 GCD Queue에 던지면 나머지 Thread 관리는 OS단에서 다 알아서 처리해 버린다.
  • GCD Queue는 블럭의 경량화된 리스트이다.
  • 모든 GCD Task는 GCD queue로 Enqueue 된다.
  • 이후 모든 Task는 GCD Queue에 의해 자동으로 Thread 생성되어 Dequeue 된다.

그럼 GCD  Queue에 대해 좀 더 세밀하게 알아보자.

좀 엉뚱하지만 Thread의 메모리상 크기는 얼마일까? 보통 512KB로 잡힌다. 그럼 1000 개의 Thread를 동시에 실행하려면 얼만큼의 리소스가 소요될까? 대략 0.5GB로 아마 아이폰은 예전에 뻗었을 것이다. 실제 내 경험상 아이폰에서 Thread관련 처리를 할 때 동시에 5개 이상 처리는 무리다.

그런데 CGD Queue의 크기는 얼마일까? 256 byte이다.

이것이 바로 블럭의 경량화된 리스트 이다.

그리고 GCD Queue는 Task 하나당 Thread 하나를 만들지 않는다.

Task들이 FIFO방식으로 GCD Queue에 쌓이면 우선 OS 단에서 유휴 코어를 산정하고 Thread Pool에서 재활용 가능한 Thread를 해당 코어만큼 Task로 매칭하여 실행해 버린다.

개발자는 그저 Task가 100개가 되던 1000개가 되던 상관없이 그냥 GCD Queue에 넣어 버리면 끝인것이다..

그럼 GCD Queue에는 어떤것이 있을 까?



  • Main Queue

dispatch_get_main_queue()로 메인 스래드/메인 루프에 테스크를 매칭시킨다.

  • Private Queue

dispatch_queue_create()로 순서대로 큐의 작업을 실행 시킬 때 사용된다.

  • Global Queue

dispatch_get_global_queue()로 Thread pool 방식으로 동작하며, 모든 작업은

이 큐로 보내진 다음 임의의 스레드에서 비동기 실행된다.


 

이상으로 GCD 에 대한 설명을 마치려고 한다.



출처 : http://dev.kthcorp.com/2011/05/19/grand-central-dispatch-gcd-apple-ios/


  1. 24회 WWDC
  2. 다음 달이면 앱스토어를 연지 5년이 된다. 그동안 500억 다운로드가 이루어졌다.
  3. 90만개의 앱이 등록됬다. 37만 5000개의 아이패드 앱이 있다. 5억7500만개의 계정이 등록되어 있다. 개발자들은 이를 통해 100억달러를 벌었다.
  4. Anki : iOS플랫폼에서 새로운 분야를 창조했다. 인공지능과 로보틱스를 결합한 제품을 생산하는 신생회사이다. 

-카메기멜론 대학교 로보틱스 박사과정에서 생각하고 개발하게 됬다.

-실시간으로 상황을 인식하고 원격 조종이 아닌 직접 대응하는 자동차 장난감을 개발했다. Anki drive는 어떤 상황에도 대응하며 무기를 사용하여 다른 자동차를 공격하기도 한다. 가상현실이 아닌 현실에서 비디오게임을 즐길 수 있다. 아이폰과 아이팟 터치를 이용하여 AI를 거실에서 즐길 수 있다. 오늘부터 앱스토어에서 다운로드 가능하다. 

  1. 맥은 7200만개가 깔려 있으며 아이맥과 맥북은 작년 동안 미국 내에서 각 분야에서 1위를 차지했다. 지난 5년동안 맥의 성장률은 100%기록했다. 맥은 고객 만족도 1위를 자랑한다.
  2. 마운틴 라이언은 2800만개가 팔렸다. 윈도8에 비해 뛰어난 보급률을 자랑한다.
  3. 지난 10년동안 9개의 고양이과 동물의 이름을 사용해왔다. 더이상 고양이의 이름을 찾기가 힘들어졌다. 새로운 라리언을 찾다가 바다사자(Sea Lion)을 고민하기도 했다. 다음 10년은 캘리포니아의 지명을 따기로 했다. 새로운 맥 오에스 텐은 이름이 ‘매버릭스(Mavericks)’이다.
  4. 새로운 맥 오에스 텐의 기능


-파인더 탭 : 파인더에서 탭을 사용할 수 있게 됬다. 각 탭은 다른 장소와 다른 뷰를 사용 가능하다. 각 문서나 파일을 다른 탭으로도 이동가능하다.

-태그 : 아이클라우드나 로컬드라이브의 문서들을 태깅할 수 있다. 태그는 무서의 위차에 상관없이 태그에 따라 정렬해서 보여준다. 문서를 찾을 필요없이 태그를 통해서 관련 문서들을 즉시 검색할 수 있다. 메뉴를 통해 태깅할 수 있고 태그 폴더에 드레그해도 태깅 할 수 있다.

-멀티플 디스플레이 : 창을 다른 디스플레이로 이동할 수 있다. 다른 디스플레이에서도 주 디스플레이와 똑같이 메뉴바와 독(Dock)을 이용할 수 있다. 다른 디스플레이에서 풀 스크린도 지원한다. 각 디스플레이에서 미션 컨트롤도 지원한다. 심지어 애플TV에서 에어플레이를 이용할 때도 메뉴바, 독, 풀스크린 등을 보두 이용가능하다.

-timer coalescing : 많은 앱들이 작동하면CPU에서 수 많은 인터럽트가 일어난다. 매버릭스는 이 의미없는 인터럽트 시간을 72%단축시켰다. 

-compressed memory : 일반적으로 맥에서 inactive메모리를 차지하게 된다. 이는 앱을 다시 작동시키지 않는 이상 다시 쓰지 않는 메모리들이다. 이를 압축시켜 더욱 많은 메모리를 사용가능하게 했다. 매버릭스의 반응은 1.4배 좋아졌고 1.5배 더 빨깨어난다. 

-App nap : 사용 중인 앱이 다른 앱에 의해 가려져 있을 때 앱의 전원 사용이  ‘0’ 가 되어 배터리 사용을 효율적으로 하는 데에 기여한다.

-iCloud Keychain : 계정과 암호들을 아이클라우드상에 저장하여 사용자의 어떤 맥이든 사용가능하다. 심지어 카드번호나 집주소와 같은 개인 정보 도 사용 가능하다.

-notification : 알림이 오면 바로 답장을 하거나 메일을 답장하고 삭제 할 수 있게 됬다. 페이스타임이 와도 거절할 지 받을 지 알림에서 바로 결정할 수 있다. 맥이 자고 있다가 깨면 그 동안 왔던 알림들을 모아서 표시해준다.

-Calendar : 제일 먼저 인터페이스가 바뀌었다. 시간, 장소뿐만 아니라 지도와 날씨도 표시해준다. 장소를 지정할 때는 주변의 장소를 기반으로 추천해주기도 한다. 일정 알림이 캘린더에서도 위치 기반하여 알려줄 수 있다.

-Maps : 맥에 지도 앱이 추가됬다. iOS기기에서 사용 했던 것처럼 인포카드, turn by turn direction,  플라이오버등을 이용가능하다. 맥에서 이용 중이던 네비게이션을 iOS기기로 보낼 수도 있다.

-Books : Books를 이용해서 맥에서도 iBooks처럼 전자책을 이용할 수 있다. iBooks에서 기록한 노트 필기를 플립노트처럼 넘겨보는 인터페이스를 제공한다.

  1. 사파리는 전반적으로 인터페이스가 깔끔해졌다. 북마크와 리딩리스트, 트위터 이용이 편리해졌다. 이외에도 공규메모리 캐쉬로 배터리 절약에 기여한다. 니트로 자바스크립트 엔진은 속도가 더욱 개선되어 크롬보다 3.8배 빨라졌다. 메모리는 크롬 등의 기타 브라우저의 77%만 사용한다. 전원 사용은 크롬의 62%, 파이어폭스의 34% 이다.

-북마크를 사이드바에서 볼 수 있다. 트위터에서의 링크들도 사이드바에 정리되어 볼 수 있다. 리딩리스트들은 하나의 문서처럼 스크롤링하여 볼 수 있다. 리딩리스트의 기사들을 Reader(읽기도구)를 통하여 마치 하나의 문서처럼 여러 기사들을 스크롤링하여 읽을 수 있다.

  1. 새로운 맥북에어는 All-day Battery life를 지원한다. 새로운 해스웰 CPU를 장착했다. 전력 사용을 줄이고 GPU 유닛을 2개가 사용된다. 그래픽 프로세싱이 40% 상승했다. 배터리 라이프는 11인치는 9시간, 13인치는 12시간이 됬다. 아이튠즈 무비를 10시간동안볼 수 있는 양이다. 플래시는 45%빨라지고 와이파이 802.11 ac를 지원한다. 이 덕분에 와이파이는 3배 빨라졌다. 

-맥북 에어 11인치 : $999(128GB)    $1199(256GB)

-맥북 에어 13인치 : $1099(128GB)   $1299(256GB)

  1. 새로운 에어포트 익스트림과 타임캡슐은 802.11 ac를 지원한다. 듀얼밴드를 동시지원한다. 안테나 범위도 증가했다. 2~3TB를 장착했다.
  2. 새로운 맥 프로는 완전히 새로운 디자인을 채택했다. 새로운 디자인 덕분에 기존의 맥 프로 크기의 1/8수준이다. 새로운 Xeon칩을 장착했다. 12코어에 256bit 부동소수점 처리를 할 수 있다. PCI 익스프레스 3세데를 지원한다. 기존의 칩보다 2배 빨라졌다. ECC메모리를 장착했다. 2배 빨라졌다. 6GB/s의 전송속도를 자랑한다. 내부 저장소는 플래시를 장착했으며 1.25GB/s의 읽기 속도와 1.0GB/s의 쓰기 속도를 자랑한다. 기존보다 2.5배 빨라졌다. 새로운 규격인 썬더볼트2를 지원한다. 20GB/s의 속도를 자랑하고 각 포트 당 6개의 장비를 연동할 수 있다. 이는 2배 빨라진 속도이다. 듀얼 GPU는 528GB/s의 속도를 내며 기존보다 2.5배 빨라진 것이다. 이를 통해서3개의 4k(3840x2160) 디스플레이를 동시 지원할 수 있다. 뒷면의 각 포트는 불빛이 난다. 새로운 맥 프로는 중국이 아닌 미국에서 생산된다.
  3. 3억명이 아이클라우드를 사용한다. 이는 가장 빠르게 성장한 클라우드 서비스이다. 아이튠즈는 3억명의 유저를 보유하고 있다. 게임센터는 2억4천만명을 보유하고 있다. 8억개의 아이메시지를 처리하고 7.4조개의 알림을 보낸다.
  4. iWork는 아이클라우드를 통해 사용 가능해졌다. 맥과 iOS에서 이용하는 것처럼 브라우저, PC 등에서 사용가능해졌다. 모든 문서는 이전과 같이 아이클라우드를 통해서 자동으로 동기화된다.
  5. iOS는 세계에서 가장 강력한 모바일OS이다. 6억개의 iOS기기들이 팔렸다. 아이폰(약 75분)은 안드로이드(약 48분)의 평균 일일 사용률보다 50%가량 높다. iOS는 모바일 웹에서 60%의 점유율을 가지고 있으며 테블릿 시장에서는 82%의 점유율을 자랑한다. 이는 안드로이드의 4배에 해당한다. iOS는 고객만족도 97%이며 1위를 자랑한다. 이는 소프트웨어 지원에서 비롯하는 부분이다. iOS는 최신 버전인iOS6가 전체의 93%인 반면 안드로이드는 최신 버전인 젤리빈이 33%이다.
  6. iOS7은 지금까지 iOS버전 중에 가장 큰 변화를 가져왔다. 그리고 새로운 UI를 채택했다.

-새로운 UI : 기존의 실제 사물에서 따온 UI를 버리고 단순하고 3D효과를 제공하는 UI로 탈바꿈했다. 새로운 UI는 사용자의 모션에 반응하여 3D 효과를 제공한다.

-컨트롤 센터 : 화면의 아래에서 위로 쓸어올리면 나타난다. 컨트롤센터를 이용해서 에어플레인 모드, 와이파이, 블루투스, 방해금지 모드, 화면 고정, 화면 밝기 등을 설정할 수 있다. 뿐만 아니라 자주 사용하는 앱을 어떤 상황에서도 즉시 이용할 수 있도록 해준다.

-Notification center : 3개의 탭으로 구분해서 정보를 더욱 보기 쉽게 정리해준다. ‘today’탭은 오늘의 날씨, 일정, 알림등을 보여준다. ‘missed’는 사용자가 확인하지 못한 알림들을 모아서 보여준다. ‘all’탭을 통해서 이 모든 알림들을 모아서 볼 수도 있다.

-Multi tasking : iOS7은 진정한 멀티태스킹을 실현했다. 또한 미리보기를 지원하여 각 앱의 구동화면을 확인할 수 있다.

-Camera : 카메라는 비디오, 사진, 정사각형, 파노라마 촬영을 지원하고 여러가지의 필터들도 지원한다.

-Photos : 카메라롤의 사진들 찍은 장소와 날짜로 분류되어 표시가 되어진다. 또한 년 단위로 나누어 정리된 사진들을 볼 수 있다. 포토스트림은 기존의 사진 뿐만아니라 비디오도 공유할 수 있다.

-Airdrop : 에어드롭을 통해서 사진이나 문서를 친구에게 바로 전송해 줄 수 있다. 와이파이와 블루투스를 이용해서 전송된다. 별도의 설치가 필요하지 않고 컨트롤센터에서 에어드롭을 탭하면 바로 이용 가능하다.

-Safari : 더운 넓은 화면을 브라우징에 활용하도록 디자인됬다. 스와이프를 하면 전, 후 페이지로 이동할 수 있다. 그리고 새로운 탭 뷰를 지원한다. 맥에서의 사파리처럼 북마크, 리딩리스트, 트위터에서 공유된 링크 리스트들을 이용할 수 있다. 아이클라우드 키체인을 통해 개인 정보, 연락처, 계정, 암호 등이 자동으로 기입되게 할 수 있다.

-Music : 기존의 UI를 개선했을 뿐만 아니라 동기화가 필요없이 아이클라우드를 통해 기존에 구입했던 음악을 바로 들을 수 있다.

-iTunes radio : 장르와 가수들을 기준으로 개인에게 특화된 Station을 제공하고 각Station은 개인의 취향에 맞는 음악들을 들을 수 있게 해준다.

-Siri : 기존의 시리보다 인식을 잘하고 더 빨리 반응한다. 또 기존에 제공하던 서비스와 함께 Bing, 위키피디아, 트위터에서의 검색을 지원한다.

-App store : ‘App near me’를 통해서 사용자가 있는 지역을 기반해서 가장 인기있는 앱들을 추천해준다. ‘Kid’ 카테고리를 추가했다. 기존의 iOS에서는 사용자가 직접 업데이트를 해야했지만 iOS7은 자동으로 앱들을 업데이트 해준다.

-find my iPhone : 아이폰을 잠금으로써 다른 사용자의 아이폰 사용을 완전히 막을 수 있는 기능을 제공하고 메시지를 표시할 수 있다.

-iOS in car : 자동차에 설치되어있는 스크린을 통해서 iOS를 이용할 수 있다. 대표적으로 자동차의 스크린을 통해서 turn by turn navigation을 이용할 수 있다. Siri eye free를 이용하여 운전에 집중하면서 전화, 메시지 등을 처리할 수 있는 환경을 지원한다.






'WWDC > 2013' 카테고리의 다른 글

[Apple] WWDC 2013 키노트 요약  (0) 2013.06.12

잡스가 세상을 떠난지 벌써 1년이 지났다. 잡스가 남긴 유산 위에서 애플은 계속해서 지속적인 성장과 발전을 이루고 있다. 물론 '혁신'이라는 평가는 더이상 받지는 못하지만 아직도 애플은 시장을 선도하는 기업으로 굳건히 자리를 지키고 있다. 이 글에서는 지금의 애플을 있게 만들고 인류의 삶을 윤택하게 만든 잡스의 생애에 대해 얘기를 하려고 한다. 물론 아주 세세한 부분까지는 다룰 수 없다. 자서전과 영화, 위키백과를 통한 필자의 지식으로 채워 넣을 예정이기 때문에 정확하지 않을 수 있다. 혹시 잘못된 부분이 있다면 댓글을 남겨주기 바란다.

 

 잡스가 공학에 관심을 갖기 시작한것은 그의 아버지가 '히스키트'라는 전자공학 키트를 선물하면서부터 이다. 잡스의 양아버지 '폴 라인홀트 잡스'는 기계공이었다. 잡스는 아버지를 따라 자연스럽게 기계에 관심을 갖게 되었고 아버지가 마련해준 차고의 한 구석의 작은 작업대에서 히스키트를 가지고 놀았다.


 잡스는 캘리포니아의 쿠퍼티노에서 학교를 다녔으며 그 당시, 쿠퍼티노와 팔로알토 주변(현재 '실리콘 벨리')은 스탠포드대학교를 중심으로 작은 IT회사들이 모여들던 시기였다. 물론 잡스도 팔로알토의 HP(휴렛-팩커드)에서 방과후 수업을 들으며 후에 동업을 하게 되는 스티브 워즈니악과 여름에 임시 채용으로 일하게 된다. 잡스는 이후에 리드대학교로 진학한다. 리드대학교에서 잡스는 디자인 수업을 듣게 되고 그 후, 글자와 모양 디자인에 관하여 관심을 갖게 된다. 애플의 디자인 철학은 이 때부터 시작 되었는지 모른다. 리드대학교를 중퇴한 잡스는 "즐기면서 일하는 곳"이라는 구인광고를 보고 '핑'이라는 게임을 만들어 승승장구하던 게임회사, 아타리에 취직해 일하게 된다. 이 때, 잡스는 취직할 때까지 로비에서 버티겠다고 고집부렸다는 일화도 유명하다. 


 후에 워즈니악의 권고로 홈부루 컴퓨터 클럽에 나가게 된다. 홈부르 컴퓨터 클럽은 팔로알토의 엔지니어들이 자신이 만든 컴퓨터와 기계를 들고와서 서로 보여주고 자랑하는 모임이었다. 이 클럽을 통해 잡스와 워즈니악은 애플1을 선보였다. 애플 1 발표 자리를 통해 컴퓨터 부품가게인 '바이트 샵'을 운영중인 '폴 테럴'을 만나게 된다. 폴 테럴을 통해 바이트 샵에 100대 납품 계약을 받게 된다.

 

 

애플1


 

 그 후, 차고에서 시작한 애플은 애플1의 성공에 힘입어 다음 제품을 준비한다. 차기 제품인 애플 2의 구상은 바이트샵에 애플1을 납품할 당시, 폴 테럴의 말이 시작이었다. 폴 테럴은 전문 엔지니어를 제외한 일반 사용자들은 전기 코드만 꼽으면 사용 가능한 기기를 원한다는 말을 했고, 잡스는 애플 2는 올인원(모든 부품이 조립된 완전체 형) PC의 형태를 가져야 한다고 생각한다. 즉, 각 부품을 조립할 필요없이 전기만 공급하면 바로 사용 가능한 PC이다. 이를 기반으로 1979년 플라스틱의 외형의 애플2를 공개한다. 뒤이어 주식을 공개하고 잡스는 1980년 24살의 나이에 억만장자가 된다.



애플2



 더욱더 커지는 애플은 엔지니어가 아닌 전문 경영인이 필요하게 되었고 펩시의 부사장으로 있던 존 스컬리를 영입하게 된다. 여기서도 잡스가 존 스컬리에게 "평생 설탕물을 파시겠습니까? 저와 같이 세상을 바꾸시겠습니까?"라고 말한 일화는 매우 유명하다. 잡스는 제록스의 PARC에서 마우스를 이용한 GUI(Graphic User Interface)를 보게 되고 제록스의 이사진은 쓸모없는 물건이라고 생각했는지 잡스에게 사용권을 주게 된다. 잡스는 당시 '빅브라더'로 불리던 거대 컴퓨터 회사 IBM의 대항마로 자신의 딸 이름을 딴 리사를 내 놓게 된다.

 

 

리사

 

 

 하지만 터무니 없이 비싼 가격으로 인하여 뛰어난 성능에도 불과하고 리사는 10년동안 10만대 밖에 팔지 못하는 부진을 면치 못한다. 결국 리사는 세금 문제로 인하여 전부 매립지에 파묻히게 된다. 리사의 실패 이후 잡스는 매킨토시 프로젝트를 수립하여 GUI기반의 컴퓨터 제작에 매진한다. 하지만 당시 명령어와 명령줄에 익숙해 있던 프로그래머들에게 GUI 프로그램은 커다란 도전 과제였고 이는 소프트웨어의 부재로 이어지게 되었다. 결국 매킨토시는 기존의 애플1의 차기 버전 애플2보다 적게 팔리면서 고전을 면치 못하게 된다.

 

 

매킨토시


 또한 매킨토시의 내부를 비공개했기 때문에 IBM PC 호환기종들이 컴퓨터 시장을 장악하게 되는 계기를 만들게 된다. 이는 지금까지도 이어져 오고 있다. 리사와 매킨토시의 연이은 실패와 잡스의 난폭한 성격으로 인해 잡스는 1985년 자신이 30살이 되던 해에 자신이 영입한 존 스컬리에 의해 경영에서 물러나게 된다. 

 

 애플에서 쫓겨난 잡스는 넥스트라는 회사를 세운다. 넥스트라는 회사는 세계 최초의 객체지향 운영체제인 '넥스트 스텝'을 개발했다. '넥스트 스텝'이라는 운영체제를 이용한 넥스트라는 컴퓨터도 개발했다. 하지만 넥스트 컴퓨터는 정사각형의 특이한 모양을 가지고 있었고 이 모양 때문에 기존의 컴퓨터 회로 대신에 특별 제작한 회로를 사용해야했다. 이는 넥스트컴퓨터의 단가를 올리는데 큰 작용을 했다. 또한 잡스는 당시에 가장 널리 쓰이던 플로피디스크 대신 광학 드라이브를 넣게 되는데 이 또한 판매 부진에 일조를 한다. 결국 1989년 잡스는 애플의 주식을 팔면서 투입한 천문학적인 개발비를 회수하지 못하고 억만장자에서 2500만달러의 자산가로 전락하고 만다.

 

 

넥스트 컴퓨터

 

 

 한편 잡스는 조지 루카스의 컴퓨터 그래픽 회사를 보고 매료된다. 결국 잡스는 컴퓨터 그래픽 회사를 인수하기에 이른다. 회사의 이름을 '픽사'로 바꾼다. 픽사의 가장 큰 업무는 의료용 기기에 사용되는 하드웨어의 생산이었다. 그리고 컴퓨터 그래픽을 이용한 영상을 만드는 작은 부서로 이루어져있었다. 잡스는 컴퓨터 그래픽을 이용한 영상을 제작하는 부서에 관심을 가지게 된다. 이 작은 부서는 15분의 단편 영화를 만들어 상을 받게 되고 잡스는 이 부서에 더욱 많은 투자를 하게된다. 결국 픽사는 1995년 토이스토리를 개봉하여 엄청난 수익을 창출한다. 픽사는 디즈니에 인수 합병이 되고 잡스는 디즈니의 이사진이 된다.

 

 반면, 애플은 잡스가 떠난 후에도 경영 부진이 지속됬다. 결국 1997년 애플은 넥스트를 인수하면서 잡스의 경영복귀가 가시화된다. 그 해 7월 잡스는 CEO로 복귀하게되고 10억달러의 적자를 내던 애플을 한해만에 4억달러의 흑자로 돌린다. 잡스는 매킨토시 프로젝트를 부활 시켜 1998년 아이맥을 공개한다. 그리고 넥스트에서 개발했던 '넥스트스텝'을 맥에 맞게 탈바꿈 함으로써 Mac이라는 새로운 운영체제를 개발한다. 1999년엔 아이북이라는 노트북을 공개했다. 이어 뮤직 플레이어인 아이팟을 만들었고 아이튠즈라는 음악시장을 개척하기도 한다. 애플은 데스크탑과 노트북 시장을 선도했다. 그리고 뮤직플레이어와 커다란 음악 유통시장까지 장악하기에 이른다.

 

 

1세대 아이맥


 잡스는 2007년 터치스크린 기반의 아이팟과 휴대전화, 모바일 인터넷을 결합시킨 아이폰을 공개한다. 이듬해에 3세대 통신망에 대응하는 아이폰 3G를 내놓는다. 그리고 SDK가 공개 되면서 아이폰 OS 2.0부터 애플의 앱스토어를 통해 자유롭게 앱을 만들고 판매할 수 있게 된다. 2009년 더 빠른 CPU와 아이폰 OS 3.0을 탑재한 아이폰 3GS를 공개한다. 2010년엔 자이로와 가속도계를 가지고 레티나 디스플레이를 채택한 아이폰 4를 공개하기에 이른다. 그리고 아이폰 4는 지금 모든 스마트폰의 원형이 되었다. 2011년 잡스의 건강은 많이 악화되었다. 이미 2004년 췌장암 수술을 받은 이후로 우려되었던 일이었다. 결국 잡스는 2011년 Mac OS X Lion과 iOS5, 아이클라우드 기조연설을 끝으로 애플의 무대에서는 다시는 볼 수 없게 되었다. 2011년 10월 5일 스티브 잡스는 췌장암 투병끝에 죽음을 맞이한다. 밑의 사진은 잡스의 유작이라며 'iPhone for Steve'라는 애칭으로 불리던 아이폰 4S이다.


아이폰 4S







              


 프로세서

 A6 듀얼코어 프로세서

1.2GHz

A5 듀얼코어 프로세서

800MHz

A4 싱글코어 프로세서

800MHz

 RAM

 1.0GB

 512MB

 512MB

 용량

 64GB, 32GB, 16GB

 16GB

8GB

두께

7.6mm

 9.3mm

 9.3mm

무게

112g

 140g

 137g

 화면 크기

4 인치

3.5 인치

3.5 인치

해상도

1136x640

 960x640

 960x640

화면비율

16:9

3:2

3:2

배터리

1440mAh

 1430mAh

 1420mAh

3G

 GSM, CDMA

 World Phone

(GSM, CDMA 지원)

GSM, CDMA 

 LTE

 O

X

 SIM

 nano-SIM

micro-SIM

micro-SIM

 Siri

O

O

X

 카메라

800만화소

(떨림 보정, 얼굴인식)

800만화소

(떨림 보정, 얼굴인식)

500만화소

 파노라마

O

O

X

 동영상

1080p HD

(떨림 보정, 얼굴인식)

1080p HD

(떨림 보정)

720p HD

 헤드폰

EarPods

EarBirds

EarBirds

커넥터

Lightening

30-Pin

30-Pin

 지도

3D 모델링 지원,

Turn by Turn

Direction 지원

3D 모델링 지원,

Turn by Turn

Direction 지원

2D 지도,

경로탐색만 가능

 Flyover

O

O

X

 페이스타임

Wi-fi, 3G, LTE 지원

Wi-fi, 3G 지원

Wi-fi 지원

 Airplay Mirroring

O

O

X

 데이터 무제한

X

O

O



%16:9 화면 비율이 진정한 HD의 구현이라는 평가를 받는다. 하지만 3:2의 화면 비율이 더 좋다고 표시한 이유는 모든 iOS기기의 해상도 호환이 자동으로 이루어 지기 위해서 3:2의 비율을 유지해야하기 때문이다. 아이폰5는 16:9의 비율을 가지기 때문에 별도로 레이아웃을 구성해야 한다.


%블랙리스트 제도의 도입으로 아이폰5의 3G요금제의 개통이 가능할거 같이 보였다. 하지만 이통사들의 LTE고객 유치에 따른 정책으로 인하여 아이폰5는 LTE요금제로만 개통이 가능할 것으로 보인다. 결국, 무제한 데이터를 이용할 수가 없다.


13일 새벽(한국 시간)에 아이폰5가 발표되었다. 눈에 확 띄는 점은 디자인과 화면의 크기!!

아이폰5의 사양을 살펴보자면 일단 AP가 업그레이드 되었다. 종전의 아이폰4S의 A5프로세서를 업그레이드한 A6프로세서 듀얼코어이다. 이로써 아이폰은 2배 이상 빨라졌고 배터리를 더 효율적으로 사용한다. 램은 1GB로 확장했고 800만 화소의 카메라에 파노라마 기능을 제공한다. 기존의 아이폰은 마이크를 2개를 활용하는 반면 아이폰5는 마이크를 3개를 이용하여 입력되는 음성의 질을 더욱 개선하였고 이로 인해 시리의 인식률과 통화품질을 더욱 개선하였다. 

 iOS6를 지원한다. iOS6는 기존의 iOS5와 다른 차이점은 구글지도가 아닌 애플의 자체 지도 서비스를 이용한다는 점과 '패스북'이라는 티켓관련 앱을 지원한다는 점, 페이스타임을 와이파이뿐만 아니라 셀룰러망으로도 이용할 수 있다는 점, 페이스북이 자체내장되어 있다는 것이다. 그리고 무엇보다 시리가 한국어를 지원한다는 점이다. iOS6 베타 버전을 써본 결과 한국어 인식률이 좋은 편은 아니지만 시간이 지날수록 데이터베이스에 데이터가 누적되어 더욱 높은 인식률을 보여줄 것으로 생각된다.

 화면의 크기는 4인치로 커졌다. 한 손으로 잡기 편하게 하기 위하여 폭은 늘어나지 않고 길이만 늘어나 1136X640의 해상도를 갖는다. 기존의 제품과 같이 당연히 레티나 디스플레이이다. 통신방식으로 LTE와 GSM, CDMA, 블루투스4.0을 지원한다. 단 아이폰4S와 같이 한 모델에서 지원하는것이 아니라 GSM모델과 CDMA모델이 따로 존재한다.

 무엇보다 눈에 띄는 것은 충전기 커넥터와 이어폰의 모습이다. 충전기는 기존의 30핀에서 lightning으로 바꼈다. 커넥터가 바뀜으로써 아이폰의 내부 공간을 더욱 효율적으로 사용 가능해졌으며 충전기를 연결할 때, 위, 아래 구분없이 꼽기만하면 된다. 그리고 이어팟은 기종의 이어폰과 달리 인체공학적으로 많은 시험을 거쳐 귀에 편리한 모양을 갖추게 되었고 훨씬 고음질을 즐길 수 있게 되었다. 그리고 이어폰잭이 기존의 상단에서 하단으로 이동하였다. 



-아이폰5 사양


AP : A6 1.2GHz 듀얼코어 프로세서

RAM : 1GB RAM

OS : iOS6

해상도 : 1136X640 326ppi

화면크기 : 4인치

통신방식 : GSM 모델 - LTE, GSM, Wi-Fi, 블루투스4.0

                  CDMA 모델 - LTE, CDMA, Wi-Fi, 블루투스4.0

카메라 : 800만화소(후면), 120만화소(전면)

용량 : 64GB, 32GB, 16GB


=붙임=

키노트 관련 내용


1.     아이폰5는 세계에서 제일 얇다

2.     레티나 디스플레이 326ppi, 4인치, 1136X640

한손으로 사용하기 편하게 하기위해서 폭을 그대로 유지

넓은 화면으로 더욱 앱들을 편리하게 이용가능하고 더욱 많은 것들을 볼 수 있다. 색선명도가 44%향상, 터치에 더욱 민감해짐

3.     LTE 100Mbps : 싱글칩, 싱글 주파수, 다이나믹 안테나

4.      A6 듀얼코어 프로세서 : 2배 빠른 CPU, 2배 빠른 그래픽처리

5.     배터리 라이프 : 대기 – 225시간

6.     iSight 카메라 : 8백만화소  3264X2448

                         Dynamic low light mode

                         노이즈 감소, 스마트 필터, 저조도 성능향상

                         아이폰 4S보다 40% 빨라졌다.

                         포토스트림 공유(iOS6)

                         파노라마(아이폰5, 아이폰 4S 지원) : 2800만화소

7.     비디오 : 1080p HD, 떨림보정, 얼굴인식, 녹화중 사진촬영 가능

8.     페이스타임 : 720p, 얼굴인식, 셀룰러 네트워크 사용 가능(아이폰5, 아이폰 4S 지원)

9.     오디오 : 3개의 마이크로 소음 감소와 음질 향상

               스피커의 크기가 20% 더 작아졌다.

               광대역 오디오(50Hz~10kHz) <=> 일반 오디오(80Hz~4kHz)

10. 커넥터 : Lightning커넥터 사용 내구성 향상, 크기를 80% 줄임

                                                         , 아래 구분없이 사용 가능

11.  iOS6 : 자체 맵 서비스인포카드, turn by turn direction(네비게이션 기능)

                                            3D 모델링

                                            flyover기능(아이폰5, 아이폰4S 지원)

            알림센터 - 트위터와 페이스북에 즉시 업로드가능

            사파리 - 가로화면에서 풀브라우징 지원

                           아이클라우드탭으로 다른 iOS기기나 맥의 창 이용가능

            메일 – VIP 메일함을 이용해서 어느 메일함이든 한 곳에서 볼 수 있음

            패스북 티켓 관리, 시간과 장소에 따라 알림 기능, 장소 시간 자동변경

            포토스트림 공유 선택한 친구들과 사진을 공유가능, 댓글 기능

            시리 날씨, 주식, 음식점뿐만 아니라 스포츠와 영화 정보, 예약도 검색가능

                        페이스북에 상태 공유 가능

                        페이스북 빌트인

                         지원언어 : 한국어, 영어(미국, 영국, 캐나다, 호주), 스페인어(미국, 멕시코, 스페인), 프랑스어(프랑스, 캐나다, 스위스), 독일어(독일, 스위스), 이탈리아어(이탈리아어, 스위스), 일본어, 북경어(중국 본토, 대만), 광둥어(홍콩)

12.  색상 : 블랙&슬레이트, 화이트&실버

13.  가격 : 63GB – $399   32GB – $299   16GB – $199

14.  출시 : 1- 9 21  미국, 캐나다, 영국, 프랑스, 독일, 호주, 일본, 홍콩, 싱가포르

           2– 9 28일 오스트리아 벨기에 체코 덴마크 에스토니아 핀란드 헝가리

            아일랜드 이탈리아 리히텐슈타인 리투아니아 룩셈부르크 네덜란드 뉴질랜드     

            노르웨이 폴란드 포르투갈 슬로바키아 슬로베니아 스페인 스웨덴 스위스

15.  iOS6 출시 : 9 19




1.     아이폰5는 세계에서 제일 얇다

2.     레티나 디스플레이 326ppi, 4인치, 1136X640

한손으로 사용하기 편하게 하기위해서 폭을 그대로 유지

넓은 화면으로 더욱 앱들을 편리하게 이용가능하고 더욱 많은 것들을 볼 수 있다. 색선명도가 44%향상, 터치에 더욱 민감해짐

3.     LTE 100Mbps : 싱글칩, 싱글 주파수, 다이나믹 안테나

4.      A6 듀얼코어 프로세서 : 2배 빠른 CPU, 2배 빠른 그래픽처리

5.     배터리 라이프 : 대기 – 225시간

6.     iSight 카메라 : 8백만화소  3264X2448

                         Dynamic low light mode

                         노이즈 감소, 스마트 필터, 저조도 성능향상

                         아이폰 4S보다 40% 빨라졌다.

                         포토스트림 공유(iOS6)

                         파노라마 기능(아이폰5, 아이폰 4S 지원) : 2800만화소

7.     비디오 : 1080p HD, 떨림보정, 얼굴인식, 녹화중 사진촬영 가능

8.     페이스타임 : 720p, 얼굴인식, 셀룰러 네트워크 사용 가능(아이폰5, 아이폰 4S 지원)

9.     오디오 : 3개의 마이크로 소음 감소와 음질 향상

               스피커의 크기가 20% 더 작아졌다.

               광대역 오디오(50Hz~10kHz) <=> 일반 오디오(80Hz~4kHz)

10. 커넥터 : Lightning커넥터 사용 내구성 향상, 크기를 80% 줄임

                                                         , 아래 구분없이 사용 가능

11.  iOS6 : 자체 맵 서비스인포카드, turn by turn direction(네비게이션 기능)

                                            3D 모델링

                                            flyover기능(아이폰5, 아이폰4S 지원)

            알림센터 - 트위터와 페이스북에 즉시 업로드가능

            사파리 - 가로화면에서 풀브라우징 지원

                           아이클라우드탭으로 다른 iOS기기나 맥의 창 이용가능

            메일 – VIP 메일함을 이용해서 어느 메일함이든 한 곳에서 볼 수 있음

            패스북 티켓 관리, 시간과 장소에 따라 알림 기능, 장소 시간 자동변경

            포토스트림 공유 선택한 친구들과 사진을 공유가능, 댓글 기능

            시리 날씨, 주식, 음식점뿐만 아니라 스포츠와 영화 정보, 예약도 검색가능

                        페이스북에 상태 공유 가능

                        페이스북 빌트인

                         지원언어 : 한국어, 영어(미국, 영국, 캐나다, 호주), 스페인어(미국, 멕시코, 스페인), 프랑스어(프랑스, 캐나다, 스위스), 독일어(독일, 스위스), 이탈리아어(이탈리아어, 스위스), 일본어, 북경어(중국 본토, 대만), 광둥어(홍콩)

12.  색상 : 블랙&슬레이트, 화이트&실버

13.  가격 : 63GB – $399   32GB – $299   16GB – $199

14.  출시 : 1 - 9 21  미국, 캐나다, 영국, 프랑스, 독일, 호주, 일본, 홍콩, 싱가포르

           2– 9 28일 오스트리아 벨기에 체코 덴마크 에스토니아 필란드 헝가리

            아일랜드 이탈리아 리히텐슈타인 리투아니아 룩셈부르크 네덜란드 뉴질랜드    

            노르웨이 폴란드 포르투갈 슬로바키아 슬로베니아 스페인 스웨덴 스위스

15.  iOS6 출시 : 9 19

16. 아이튠즈 63개국 이용(한국 제외)

17.  아이튠즈 스토어, 앱 스토어, 아이북스 스토어 redesign

18.  검색 결과 화면 개선, 프리뷰 지원, 페이스북과 트위터로 공유가능

19.  새로운 스토어들은 9 19일부터 이용가능

20.  아이클라우드 2억명이 사용중

21.  아이튠즈 : UI 단순화, 아이클라우드 빌트인, 새로운 미니플레이어

                   10월부터 이용가능

22.  아이팟 나노 : 아이팟 나노 7세대

                         5.4 mm 38% 얇아짐

                         2.5인치 화면, 멀티터치 지원

                        홈스크린 redesign, 7가지 색상

                         Lightning 커넥터 지원

                         Nike+ 지원, 블루투스4.0 지원

                        가격 - 16GB $149

23.  아이팟 터치 : 아이팟 터치 5세대

                         6.1 mm, 88g

                         4인치 레티나디스플레이

                        A5 듀얼코어 프로세서- 2배 빠른 CPU, 7배 빠른 그래픽처리

                        카메라 – 5백만화소, 오토포커스, LED플래시, 파노라마 기능

                                       포토스트림 공유(iOS6)

                         iPod Touch Loop를 이용해서 손목 스트랩을 걸어서 이용가능

                         비디오 - 1080p촬영, 손떨림보정, 얼굴인식

                         페이스타임 – 720p, 얼굴인식

                         Airplay Mirroring 지원

                         시리 지원

                         Lightning 커넥터 지원

                           가격 – 32GB $299    64GB $399

                                    아이팟 터치 4세대  16GB $199    32GB $249

24. 아이팟 셔플 : 7가지 색상 지원

                        가격 - 2GB $49

25.  새로운 이어폰 => 이어팟 : 3년간 디자인

                                               수 백개의 귀 형태를 스캔해서 조사하고 디자인

                                               후면의 홈과 하단의 홈을 통하여 중저음의 품질을 높임

 아이폰이 느려지거나 배터리 관련해서 관리법에 신경쓰는 분들이 점점 많아지는 추세이다. 심지어 가끔 보면 전공자인 필자보다 더욱 많은 정보를 가지고 계신 분도 볼 수 있다. 물론 맞는 것도 있고 틀린 것도 있지만 말이다. 

 여기에다가 필자가 알고 있는 아이폰에 관한 관리법을 적어놓으려고 한다. 물론 맞는 것도 있고 틀린 것도 있을 것이다. 만약에 틀린 것이 있다면 그에 관한 것은 댓글로 남겨주시면 수정하겠습니다.



1. 최신  OS 버전 업데이트

 최신 OS로 버전을 유지해줘야 한다. 물론 가끔 OS버전에 치명적인 오류가 발생하여 손해를 보는 경우가 있다. 하지만 최신 OS만이 보안, 자원관리, 호환성 측면에서 가장 최신의 정보를 유지하고 운영하기 때문에 최신의 버전을 유지하는것이 스마트폰의 자원 관리와 보안적인 측면에서 가장 최선의 선택이다.



2. 일주일에 한 번씩 리부팅

 아이폰은 다른 스마트폰과 다르게 배터리가 일체형으로 제작되어 있다. 그렇기 때문에 배터리를 0%에 도달하지 않도록 충전을 꾸준히 잘 해주는 분들은 아이폰을 산 이후로 한번도 꺼본적이 없는 사람들도 간간이 보인다. 하지만 모든 OS가 그렇듯이 OS는 RAM에 메모리를 할당, 해제, 할당, 해제를 무한히 반복하게 된다. 그렇게 하다보면 RAM은 덕지덕지 할당되어 있는 메모리를 정리하고 다시 할당하는 과정에서 무지 느려지게 되어있다. 그렇기 때문에 전원을 껐다가 키면서 OS가 다시 시작되면서 RAM을 한 번 깨끗이 비워주는 것이 속도향상과 OS의 동작에 큰 도움이 된다.



3. 한 달에 한번은 완전충전(켈리브레이션)

 일반적으로 켈리브레이션이란 단어는 노트북 배터리 보정에 쓰이는 단어이다. 노트북의 배터리에는 각각의 배터리 용량을 기억하는 회로가 내장되어 있어 배터리의 과충전을 막아준다. 하지만 때때로 이 회로가 배터리의 실제 용량보다 적은 용량을 기억하여 배터리를 100%활용을 못하는 상황이 발생하는데 이를 방지하기 위해서 켈리브레이션을 해준다. 

 아이폰의 배터리는 내장형으로 교체형 배터리를 사용하는 스마트폰보다 충전주기가 빠르다. 그만큼 배터리의 회로가 자신의 용량을 정확히 기억을 못할 확률이 높다. 그렇기 때문에 1달에 1번이상은 아이폰의 배터리를 켈리브레이션을 해줘야한다. 아이폰의 배터리를 켈리브레이션하는 방법은 정확히 알려진 것은 없다. 하지만 일반적으로 널리 알려진 방법을 소개하자면 대략적으로 이렇다. 일단 아이폰의 배터리를 20%미만이 될 때까지 사용한다. 20%미만이 된다면 충전기를 꽂고 100%로 완충될때까지 기다린다. 100%로 완충된 다음에도 약 30분~1시간정도 세류충전을 통해 완전히 충전될 수 있도록 한다.



4. 백그라운드 앱중에 사용을 안 하는 앱은 종료

 백그라운드상에서 앱들이 실행되고 있으려면 RAM에서 메모리를 할당 받게 된다. RAM은 휘발성 메모리이기 때문에 주기적으로 전기를 공급해줘야 한다. 그 말은 즉, 앱들이 백그라운드 상에서 많이 실행될수록 더욱 많은 전기를 사용하게 된다는 얘기가 된다. 그렇기 때문에 자주 사용을 안 하는 앱일 수록 백그라운드에서 동작하는 상황을 방지해야한다. 단, 자주 사용하는 앱을 종료시키면 그 앱을 다시 실행 시킬 때, 다시 메모리를 할당하는 번거로운 작업에 전기를 소모하게 되기 때문에 자주 사용하는 앱은 될수 있으면 종료를 안 하는 편이 현명하다.



5. 그냥 편하게 막 써라!!

 가끔 스마트폰을 모시고 사는 분들이 보인다. 그런 분들을 보면 필자는 전혀 이해가 안된다. 왜??

스마트폰은 도구다. 도구를 모시려고 사는 사람은 거의 없다. 하지만 결과적으로 스마트폰에 흠집날까봐 배터리가 달까봐 모시는 사람들이 종종있다. 필자는 그 사람들에게 말하고 싶다. 그냥 막 써라!! 이미 애플의 개발자들은 사용자들이 막 사용하는 환경을 이미 고려하고 테스트를 거쳐서 나왔기 때문에 아주 이상한 사용을 하지 않는 이상은 iOS는 이미 다 대처할 준비가 되어있다. 편하게 막 써라. 막 쓰는 것이 모시는 것보다 훨씬 오래 사용하는 경우가 많다.



6. '너무 느려졌다' 싶으면 공장 초기화도 하나의 방법

 모든 물건이 그러하듯이 스마트폰도 첫 전원을 킨 이후로 계속해서 자기자신을 망가트리기 시작한다. 모든 소모품이 그러하듯이 점점 고물이 되어간다. 하드웨어는 물론 점점 낡아 간다. 하지만 소프트웨어 또한 낡아간다. OS를 오래 사용할 수록 로그는 쌓여가고 앱들이 얽히고 섥히고 OS는 점점 느려진다. 하드웨어는 다른 스마트폰을 구입해야지만 해결되지만 소프트웨어인 OS는 공장초기화라는 방법을 사용하면 마치 스마트폰을 처음 켰을때와 비슷한 효과를 얻을 수 있다. 하지만 여기서 중요한 점은 공장초기화하기 전에 스마트폰의 자료들을 백업해야 한다는 것이다. 백업은 iTunes와 iCloud를 이용한다면 자신의 아이폰을 원래 사용하던 모습으로 손쉽게 돌려 놓을 수 있다. 필자도 공장초기화를 3~4번을 했는데 iCloud의 도움으로 복원을 손쉽게 할 수 있었다. 아이폰의 공장초기화는 보통 'DFU 복원'이라고 찾으면 쉽게 찾을 수 있다. 밑에 DFU 복원에 관련한 URL을 남긴다.


아이폰 공장초기화 방법 : http://blog.naver.com/zleorl?Redirect=Log&logNo=30139938993



7. 튜닝의 궁극체는 순정!!

 자신의 스마트폰을 간혹 혹사시키는 사람들을 볼 수 있다. 탈옥을 통하여 자신의 아이폰을 튜닝을 한다. 하지만 각 개인의 개발자 혹은 개발 팀들이 만든 탈옥 툴은 애플과 같은 회사의 체계적인 테스트나 개발환경을 갖추지 못한 경우가 대부분이다. 이런 확실하지 못한 행위들로 자신의 스마트폰을 오버클록한다는 또는 숨겨진 기능을 활성화 한다는 일을 하지 않았으면 좋겠다. 물론 자신이 필자처럼 개발자라서 개발 목적 혹은 테스트 목적으로 사용한다면 굳이 만류할 필요가 없다. 하지만 일반 사용자들이 이런 행위들을 하는것처럼 개발자 입장에서 미련해 보이는 행위가 없다. "튜닝의 끝은 순정"이란 말이 있다. 확실하게 보장되고 신뢰 받는 OS를 사용하자. 너무 성능에 얽메이다 보면 다른 가치들과 Trade-off를 해야하는 상황이 온다. 그냥 순정으로 잘 활용하는 것이 스마트폰을 해치지 않는 가장 좋은 사용방법이다.

+ Recent posts