DADAHAE's Log
비싼 장난감 가지고 노는 중 (❁´▽`❁)*✲゚*
[TIL] 22-09-16, 다양한 개발언어 이해
22-09-16 금요일
1주차

 

1교시, 2교시

Swift 언어의 배경을 알아보자.

왜? Swift 언어를 배워야 할까요?

아이폰, 아이패드, 맥용 앱부터 서버 시스템, 인공지능까지 다양한 분야에서 활용된다.

JavaScript, Python의 장점을 이어받은 언어로서, 조상 언어의 학습과 활용에 도움이 된다.

어쩌다 Swift 언어는 세상에 나왔을까요?

스위프트 로고 그림 속의 새는 ‘칼새'이다. 로고 자체는 오픈소스로 나와있어서 원 출처만 알려주면 스티커나 다양하게 만들어 사용할 수 있다.

 

 

역사를 거슬러 올라갑시다…

 

처음엔 Apple Computer Inc. 였다.

  • 스티브 잡스
  • 스티브 워즈니악

그림 밑에 있는 컴퓨터가 개인 컴퓨터이고 8비트 컴퓨터이다.

다음 단계의 개인용 컴퓨터를 만들기 위해 고민을 하는데…

제록스 사에서 ‘마우스'라는 것을 만들었다. 예전에는 마우스없이 키보드만 썼다. 제록스는 복사기로 유명한 회사이다 보니 ‘나는 복사한다'라는 동사형으로 ‘제록스'를 쓰기도 한다. 구글링처럼.

이때 스티브 잡스가 제록스의 마우스의 특허를 팔아라고 해서 나온게 ‘매킨토시'이다.

이후로 여러가지 새로운 버전의 매킨토시를 파는데, 아주 잘 된건 아니다. MS의 윈도우가 나왔기 때문… 90년대 중반에는 거의 망할 때가 된 회사가 되어버린다… 그래서 다시 내쫒았던 스티브 잡스를 다시 불러온다.

망해가는 애플에 들어와서 스티브 잡스는 새로운 물건을 내놓는다. ‘아이팟', ‘아이폰'…

iPhone이 나오고 Apple Inc.가 되었다.

컴퓨터만 파는 회사가 아니라는 것을 공식적으로 발표한다. 그래서 회사 이름에서 ‘Computer’를 뺀다.

원래는 아이패드를 먼저 만들고 있었는데 이게 휴대폰으로도 만들 수 있을 것 같아서 아이폰으로 나왔다는 일화도 있다.

‘하드웨어와 소프트웨어’ 모두 중요해요.

하드웨어와 소프트웨어가 잘 준비된, 그래서 완벽한 제품을 몇개만 출시했다.

애플이 직접 칩 설계를 할 수 밖에 없었던 이유는(m2) 외부 칩을 사서 쓸 때는 한계가 있었다. 우리의 운영체제를 잘 받아주는 우리의 칩을 만들자! 해서 직접 만들었고, 자신의 운영체제에서 더 잘 효율적으로 작동하는 칩이 완성되었다.

이번에 새로 나온 다이나믹 아일랜드도 하드웨어적으로 한계가 있는 부분을 소프트웨어로 표현했다.

📔 제품의 확장 → 이게 다 소프트웨어 기술 덕분이다.

 

NeXT의 유산

애플에서 쫒겨나고 스티브 잡스가 88년에 출시한 넥스트 컴퓨터를 만든 넥스트 회사이다. 애플에서 나올 때 퇴직 조건에 의해 개인용 컴퓨터를 출시할 수 없었다. 그래서 매킨토시와 다르게 고속으로 돌아가고 연구실에서 쓸 수 있는 컴퓨터를 만드는 회사를 차렸다.

어떤 수학자가 찾아와서 “수학 관련 프로그램을 넥스트에 넣어서 같이 팔면 안되나~ 그래서 그게 이름은 ~~인데…” 하니까 스티브 잡스는 “이름을 그거 말고 ‘Wolfam Mathematica’로 짓자!“ 했다고 한다. 그리고 해당 프로그램은 넥스트 컴퓨터에 번들로 들어가서 팔렸다. 그러다보니 미국뿐만 아니라 유럽까지도 팔렸다. 유럽의 입자 물리 연구소에서 사용했다. 그것도 대량으로!!

World Wide Web

유럽의 입자 물리 연구소 자리 곳곳에 넥스트 컴퓨터가 있었고 그걸 본 다른 사람이 “컴퓨터와 컴퓨터 사이의 연결을 ‘링크'라고 할까..?” 라고 하기도 했다. 그리고 링크를 타고 문서를 연결하자! 해서 만든 것이 ‘Web’이고 HTML도 만든 사람이다. 바로 ‘팀 버너스 리' 경이다.

Objective-C

이 모든 것이 넥스트 컴퓨터 앞에서 만든 것이다.

  • NeXT Cube → Apple Macintosh사업이 망했다. 공장도 잘 안돌고 비싸고..
    •  넥스트사 인수해서 만듦..
    • 비싼 컴퓨터, 고속이지만 비싼.. 연구실 용
  • NeXTSTEP → Mac OS X
    • 비싼 값으로 넥스트를 인수하고 스티브 잡스는 다시 애플로 돌아오고 최고 경영자가 되었다.
    • 운영체제가 넥스트 사를 인수하는 계기가 되었다.
  • Projcet Builder → Project Builder → Xcode
    • Mac OS X 이라고 하니까.. X에서 모양만 따서 만들자~
    • 당시에 둘 다 Objective-C로 만들어야 한다.

 

Objective-C

  • 1982년에 시작된 검증된 언어
  • Smalltalk 언어의 장점을 수용한 객체지향 언어
  • 동적 객체 모델과 매개변수 방식 도입
  • C와 C++ 언어로 작성된 코드 연동 가능
  • C언어 기반의 복잡한 문법
  • 언어 특성으로 오류 수정이 쉽지 않음
  • 불안한 미래 - 2006년 2.0 버전 공개 이후 업데이트 없음

 

세상이 바뀌었어요

인기있는 새 언어들과 패러다임

  • C#
    • 다들 Java보다 더 낫다는 데는 다 이유가 있는거다.
    • 언어적으로 자바보다 완성도는 높다.
  • Python
    • 누가 만들어도 같은 형식으로 만들 수 있도록 한다. 그래야 빠르게 고치니까. 실행속도는 그 다음 문제이다.
    • Django
  • Ruby
    • 일본의 천재 개발자가 만든 언어
    • 간결하고 같은 시간에 더 많은 코드를 만들게 도와드려요.
    • Ruby on rails
  • Rust
    • 메모리 오류없이 고속으로 작동하자.
    • 파이어폭스 웹 브라우저를 만드는데 쓰려고 Rust 개발자를 채용해서 하다가.. 파이어폭스는 아직 ㅠ
    • 근데 러스트 만든 개발자는 현재 애플에서 스위프트를 짜고 있다고 한다 ㅋ
  • Haskell
    • 세상 모든 컴퓨팅은 함수들의 선언으로 만들 수 있다.
    • 함수형 언어

 

새로운 언어 탄생 순간

새로운 프로그래밍언어

WWDC14에서 발표하였다.

Objective-C도 좋은데… Objective-C를 극복하자.

그래서 내놓은 새로운 프로그래밍 언어 → Swift

새로운 언어 이름은 Swift! 빠르고 최신의 안전한 반응형 언어이다.

  • 지금은 Safe, Fast, Expressive 이다.

빠르게 작동한다. Python보다 빠르고 Objective-C보다 더 빠르다!

옵젝 C언어로는 이렇게 복잡하던 코드가… 옵셔널로 단순하게 변했어요.

그러나 Objective-C 언어로 하던 일은 똑같이 한다. 같은 기술 기반위에서 작동한다. Objective-C 그리고 C언어와 섞어 써도 되겠금 하는 것이 Swift의 목적이었다.

 

Swift 언어의 조상

Swift의 조상은 누구일까요.

  • Fortran → ALGOL → CPL → BCPL → B → C → C++
  • C++ - Java - Objective-C - Perl (→ Ruby) - Python
  • SASL → Mirnada → Haskell
  • Lisp → Scheme → JavaScript

Objective-C , Ruby , Haskell , JavaScript 언어의 영향을 받았다.

 

Swift 언어 개요

공식문서의 소개글

공식문서에 그대로 있으니까 직접 들어가서 보자.
  • Swift는 폰, 데스크탑, 서버 또는 코드를 실행할 수 있는 모든 곳에서 작성하는 환상적인 소프트웨어입니다.
  • 현대 언어 사고방식에 있어 폭넓은 애플 엔지니어링 문화로부터 지혜와 오픈소스 커뮤니티의 다양한 기여로, 가장 안전하고 빠르고 상호호환되는 프로그래밍 언어입니다.
  • 컴파일러는 성능에 최적화되어 있으며 언어는 어느 쪽도 손상시키지 않고 개발에 최적화되어 있습니다. Swift는 새로운 프로그래머에게 친숙합니다.
    → 이런 부분이 Ruby와 닮은 점이라고 할 수 있다.
  • 스크립팅 언어처럼 표현력이 풍부하고 즐거움이 가득한 프로그래밍 언어입니다.
  • 플레이그라운드에서 Swift 코드를 작성하면 앱을 빌드하고 실행시키지 않고 코드르 테스하고 즉시 결과를 볼 수 있습니다.
  • Swift는 최신 프로그래밍 패턴을 채택하여 많은 클래스의 일반적인 프로그래밍 오류를 정의합니다.
    • 변수는 항상 사용 전에 초기화되어야 합니다.
    • 배열 인덱스는 범위 초과(out-of-bounds) 에러에 대해 검사되어야 합니다.
    • 정수(Integers)는 오버플로우(overflow)에 대해 검사되어야 합니다.
    • 옵셔널(Optionals)은 nil값이 명시적으로 처리되도록 합니다. 메모리는 자동으로 관리됩니다.
    • 에러 처리를 통해 예기치 않은 오류를 처리할 수 있습니다.

 

Swift 개요

  • 2014년 애플이 공개한 프로그래밍 언어
  • iOS, macOS, watchOS, tvOS 등 애플 플랫폼 앱 개발에 활용
    • 애플 외 멀티 플랫폼 환경 지원 (예, Back-end 서버, Vapor)
  • 2015년 오픈소스로 공개
    • 2022년 공식 문서 프로젝트도 오픈소스로 공개
    • 그러므로 애플에서 만들었지만, 애플이 아닌 다른 곳에서 스위프트를 쓰려고 하는 사람에게도 열려있는 언어이다.
  • ARC (Automatic Reference Counting)으로 효율적인 메모리 관리
    • 메모리 관리를 ARC가 해준다 라고 간단히 생각하자.
    • Garbage Collector(Java 등에서 사용)보다 빠른 실행 성능 확보, 구조적으로 Garbage Collector가 느릴 수 밖에 없다.
  • Smalltalk부터 이어져 온 Objective-C의 동적 객체 모델과 매개변수 방식 도입
  • 컴파일러 언어임에도 Playground로 코드 결과 즉시 확인 가능
  • 자유도 높은 문법 스타일
    예) 소괄호 생략 가능, 문장 끝에 세미콜론 생략 가능

 

언어적 특징

  • Safe
    • 안정성 : 엄격한 문법을 적용하여 실수를 방지한다.
  • Fast
    • 신속성 : C언어 수준과 동등한 성능을 목표로 한다.
  • Expressive
    • 더 나은 표현성 : 개발자들이 원하고 현대적이고 세련된 문법을 지원한다.

 

3교시

Swift 개발 환경 구축

  1. Xcode 설치
    • macOS
      • 앱스토어에서 Xcode 설치
    • Windows
    • Linux
      • swift.org 공식 문서 참고 (윈도에서 WSL로도 가능)
  2. Swift Playground
    • Mac과 iPad 앱스토어에서 설치 가능
  3. Online Swift Playground

 

함께 해봅시다.

각자 컴퓨터에 Swift 언어 환경을 설치해보자.

 

 

 

3교시, 4교시

Terminal

우리가 가장 많이 쓰고 있는 건? GUI (Graphical User Interface)

그럼 예전에는 뭘로 명령을 내렸을까?

모니터가 처음 있었을 때를 기준으로… Text-based Interface

 

왜 터미널일까요?

정의

terminal
1. 끝에 있는
2. 단말기

왜 끝에 있는, 단말기일까… 옛날 컴퓨터를 보면 가장 마지막에서 명령을 치는 곳이기 때문이다.

터미널 비긴즈

  • Server 연결을 위한 입출력 장치
  • 모든 연산은 Server에서 실행

서버 없이 단독 작동하는 개인용 컴퓨터의 시대가 오면서…

  • 터미널 기기의 유산
  • 낮은 그래픽 성능과 키보드 입력의 효율성을 고려한 텍스트 기반 운영체제
    • CP/M
    • MS-DOS
    • DR-DOS

앱이 된 터미널

일반 컴퓨터에 연산장치가 들어가니 기기였던 터미널이 앱이 되었다.

 

터미널과 친해지자!

터미널과 친해지면…

  • 키보드만으로 명령 가능
  • 마우스로 반복적 선택 작업을 한 줄의 명령으로 대체 가능

키보드와 친해지면…

  • 개별 명령을 외워야하는 부담
  • 오타 하나로 큰 사고를 낼 수 있다.
    (궁금하면 sudo rm -rf / 명령어가 무엇인지 찾아보자 ㅎㅅㅎ)
sudo rm -rf /

어쩔 수 없이 친해져야…

  • Homebrew
    • 외부에 있는 소프트웨어들을 터미널 명령 한줄로 실행하게 해주자! 하며 나온 소프트웨어.
    • 이것을 실행하기 위해서는 터미널을 써야한다.
  • cocoapods
    • 현재는 사장화되고 있는 기술
    • Xcode로 앱을 만들 때 우리가 모든 기술을 다 만들 수는 없다. 그것을 패키지라고 부른다.
    • 그래서 코코아팟은 ‘패키지 매니저'라고 보면 된다.
    • 그래도! 존재는 알고 있어야 한다. 지금은 spm을 더 많이 권장하지만,
  • npm
    • javascript 패키지 매니저

 

터미널

  • macOS Terminal
  • iTerm2
  • Windows Terminal
  • vsCode의 터미널

 

Shell

터미널은 텍스트 기반으로 명령을 주고받을 수 있는 앱이다. 터미널에서 앱을 띠우고 나서 실제 명령을 주고받을 수 있게 해주는 인터페이스, 기본 환경은 셸이라고 한다. 하나의 터미널에서 여러개의 셸을 띄워두고 다양하게 접근할 수 있다.

위키피디아에 적혀있는 정의를 가져왔다.
  • 셸(shell, 자령해석프로그램)은 운영 체제 상에서 다양한 운영 체제 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램이다.
  • 셸(껍데기의 영어 단어)은 사용자와 운영 체제의 내부 사이의 인터페이스를 감싸는 층이기 때문에 그러한 이름이 붙었다.

 

수 많은 Shell들

  • Unix / Linux 기반
    • C Shell (csh)
    • Bash - Bourne shell(sh) 계열의 macOS Catalina 이전까지 기본 shell
    • zsh - bash, ksh, tcsh 장점을 모은 masOS Catalina부터 기본 shell
  • Windows 기반
    • PowerShell - 오픈소스로 멀티 플랫폼 지원 시작

zsh 커스텀은 선택

보통 유명한 ‘oh-my-zsh’ 이라는 도구가 있다. 이것을 사용하면 zsh 기반의 터미널 환경을 다채롭게 꾸밀 수 있다.

함께해요

각자 macOS 혹은 윈도우 환경에 터미널 앱을 확인해 실행해보자.

 

 

터미널 기본 명령어

pwd

  • print working directory
  • 현재 작업중인 디렉토리 정보 출력

cd

  • change directory
  • 특정 디렉토리(폴더)로 경로 이동

ls

  • List
  • 현재 경로의 파일과 디렉토리(폴더) 목록 보기

mv

  • move

mkdir

  • make directory
  • 디렉토리를 생성

rm

  • remove
  • 파일 또는 디렉토리를 삭제
    • 디렉토리는 r 옵션 사용

 


 

Design Thinking

페르소나를 중심으로 생각해보기

Design Thinking이란.

정의

정의를 그대로 가져왔다.

디자인 싱킹(design thinking)은…

  • 디자인 과정에서 디자이너가 활용하는 창의적인 전략이다.
  • 디자인 싱킹은 또한 전문적인 디자인 관행보다 문제를 숙고하고, 문제를 더 폭넓게 해결할 수 있기 위하여 이용할 수 있는 접근법이며, 산업과 사회적 문제에 적용되어 있다.
  • 디자인 싱킹은 기술적으로 이용 가능하고, 사람들의 요구를 충족하기 위하여 실행 가능한 사업 전략이 고객 가치와 시장 기회로 바꿀 수 있는 것으로써 디자이너의 감각와 방법을 사용한다.

나는 개발, 기획, PM, 창업자 등등.. 을 꿈꾸는데 디자인은 디자이너가 하는 일 아닌가?

놉. 디자인은 범용적으로 생각하고 설계하는 것으로 크게 사용된다. 개발자도 어떻게 보면 디자인을 하는 것이라고 할 수 있다.

 

 

Design Thinking 흐름

📔 명견만리: 크리스토퍼 한의 영상 같이 보기
  1. Empathize (공감)
  2. Define (문제 정의)
  3. Ideate (아이디어 찾기)
  4. Prototype (시제품 만들기)
  5. Test (평가하기)

 

애플의 디자인 사이클

애플의 앱 공식문서 레슨 12에서 디자인 사이클이라는 이름으로 소개해주고 있다.

  1. Brainstorm
    • Purpose / Ideas / Audience / Focus / Reiterate
    • 페르소나를 설정할 때 참고 앱 조사도 병행되야 한다.
    • ADS : 이 앱은 무슨 무슨 앱이다! 라는 것을 명시해야 한다.
  2. Plan
    • UI/UX → iOS features (The Basics / Get Connnected / Get Innovative / Accessibility / Feature Smash) → Design
    • 기능과 기술에 대한 계획을 세우자.
      • 앱흐름 / 기능 잡아보기
  3. Prototype
    • Tips for prototyping / Prompts
    • 프로토타입을 사용하는 사용자 입장에서 바라보기
    실제로 작동하지 않더라도 구동되는 모양새가 되는 것을 프로토타입이라고 한다.
    MVP는 실제 구동이 되는 것이다. 그러나 에센셜만 뽑아서 완성을 해두는 것이다. 사용자에게 가장 필요로 하는 기능들만!

  4. Evaluate

 

Design Thinking
처음 중요한 것은 페르소나 설정공감하기(Empathy)
“열심히 만들면 누군가 쓰겠지… 나는 안쓰겠지만" ← 아무도 사용안함

 

📔 MS 17년도 컨퍼런스에서 발표한 앞이 안보이는 사람들을 위한 visual studio 사용법
https://www.youtube.com/watch?v=rVF2duPVUTY

 

이전까지 앞을 못보는 사람들을 위한 음성으로 읽어주고 프로그램을 사용하게 해주는 것에 대한 개발은 있었지만 거의 쓰이지 않았다. 왜? 그 사람들은 앞이 보이는 사람들이었고 ‘공감'이 되지 못했기 때문이다.

위 영상은 실제 앞을 못보는 MS 연구원이 직접 개발한 visual studio 사용 프로그램이다. 눈 앞의 상황을 읽어주는 기술을 만들었다고 한다.

휴대폰을 직접 조작할 수 없는 사람들에게 어떻게 휴대폰을 사용하게 할 수 있을까? 이전에도 이를 해결하기 위한 움직임은 있었다. 머리를 돌리면 커서를 돌아가게 하고 끄덕하면 클릭을 하고.. 그러나 이것은 사용하기 힘들었다.

그래서 애플에서 그냥 클릭할 수 있는 요소에 번호를 전부 매겨서 번호를 부르게 하자. 이게 굉장히 혁신적이었다. 또한 애플 워치는 한쪽 손만 조작할 수 있는 사람들을 위해 워치를 차고 손을 움직이고 쥐었다 펴면 클릭이 되고.. 이런 기능을 만들었다. 이것을 만든 분도 한쪽 팔이 불편한 분이었고 본인 스스로를 페르소나로 지칭하고 만들었다고 한다.

 

 

함께 해봅시다.

각자 생각한 앱 아이디어를 App Define Statement(ADS)에 맞추어 한-두줄로 간략하게 정의해봅시다~

(회고조 인원이서 진행하였다)

  Comments,     Trackbacks