한참 안드로이드 개발을 할 때 하이브리드 앱이라는 개념을 접했고 당시 크로스 플랫폼을 지원하는 프레임웤을 사용하여 테스트 앱을 만들어보고 발전 가능성의 한계를 느꼈던 시절이 있었습니다. 

 

그리고 몇년만에 React native라는 녀석을 다시 접하면서 하이브리드 앱에 대한 관심이 다시 생겼네요.

 

Facebook이 개발, 다양한 서비스 업체가 지원하고 있으며 종종 관련 기술 경험자를 찾는 회사도 보입니다. 

 

고 차원의 플렛폼 의존도가 높은 서비스가 아닌 데이터 인입 차원의 서비스라면 네이티브 개발을 대신하는 좋은 방안이 될 것으로 보입니다. 

 

https://www.manning.com/books/react-native-in-action

 

React Native in Action

Learn how to utilize your existing JavaScript skills to create rich cross-platform mobile apps.

www.manning.com

본 포스팅은 위 책을 베이스로 진행 할 예정입니다. React native 초기(2017년?)에 발간된 책을 처음 봤었는데 이미 많은 업데이트가 진행되어 설치부터 수 많은 삽질을 하다가 나가 떨어진 기억이 있습니다. 

* 특히 보편화되지 않은 기술에 대한 책을 고를땐 되도록 최신 발간된 것을 참고하고 공식 사이트를 통해 영어 공부?도 병행하심이..

https://lowcrash.tistory.com/23?category=783777 (옛 삽질의 흔적)

 

  iOS(Object C or Swift), Android(Java or Kotlin)을 따로 개발 할 필요 없다.

React native의 경우 기존 하이브리드 앱(웹 뷰 렌더링) 프레임워크와 달리 컴파일을 통해 자바스크립트 코드를 네이티브 코드로 변환하여 고성능 하이브리브 앱을 개발할 수 있다.

- iOS, Android 개발자가 따로 필요하지 않다

- 빌드가 빠르다. 코드 수정 후 저장하면 바로 결과 화면에 반영된다.

 

Component : 가장 중요한 키워드로 앱을 구성하는 조립 블럭 (stateful(속성 값이 있는), stateless(재사용)로 구분)

 

* React native의 기본적인 code snippet (주석 부분만 보고 넘어가자)

import React, { Component } from 'react'  // 1. react library에서 React와 Component를 가져온다.
import {
  AppRegistry,
  StyleSheet,
  View,
  Text
} from 'react-native' // 2. 다양한 UI component를 가져온다.
import API from './api' // 3. import other component

class blankRNApp extends Component {
  constructor () {
    super()
    this.state = { name: 'chris' }  //stateful
  }
  componentDidMount () { // 4. last method of lifecycle
    API.getName().then((data) => {
      this.setState({ name: data })  // 5. call render() 
    })
  }
  render () { // 6. rendering
    return ( //render must return native item or null or false
        <View> // JSX

            <Text> Hello there, {this.state.name} </Text>

        </VIew>
    )
  }
}

const styles = StyleSheet.create({ // 7. style 선언
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF'
  }
})

 

Lifecycle method : constructor, componentDidMount, render 등 클래스가 생성되면서 실행되는 일련의 메소드

 

CLI, npm, Xcode, ES2015, MVC, SPA... 알고 있으면 좋지만 필수는 아니다.. 어쩌란 말인가..

(e.g. : ES2015에서는 const 대신 import를 사용)

 

JSX : XML 처럼 보이는 자바스크립트 구문 확장 (e.g. : <Text> Hello </Text> )

React : 기존 DOM 처리 방식에서 in memory DOM을 통해 필요 부분만 갱신하여 성능 향상

Bridge : 리액트-네이티브 계층과의 통신 채널

단방향 데이터 흐름 : 최상위 컴퍼넌트의 데이터가 변경되면 자식 컴포넌트는 props로 변경된 데이터를 전달 받고 갱신됨

hot reloading : 개발시 변경된 부분만 빠르게 반영

transpilation : transpiler(바벨)가 특정 언어로 작성된 코드를 다른 언어로 변환. 언어의 최신 기능 사용

 

Custom component 만들기(기본)

class Home extends Component { ... }

-> import한(위 code snippet 주석 1) Component(객체 구조 분해 할당)를 상속하여 Home instance 생성

 

Render 함수

다른 함수의 실행

Exports

export default Home

-> 다른 Component에서 Home을 사용하려고 할 때

 

Stateless Component

const Header = () => (

    <View>

        <Text>HEADER</Text>

    </View>

)   

-> render() { ... <HEADER /> } 이런식으로 다른 component에서 재사용 가능

 

이것으로 React native의 기본적인 개념은 정리?를 하였고 다음 포스팅에서는 기본 프로젝트를 돌려보겠습니다.

* 본 포스팅에서 Bold된 내용은 꼭 숙지해 주세요. 새로운 개념을 익힐때는 그 안에서 사용하는 키워드에 익숙해지는게 1순위 입니다.

'React native' 카테고리의 다른 글

Todo 1  (0) 2019.12.25
State, Props, Lifecycle  (0) 2019.12.25
Project 생성 및 빌드  (0) 2019.12.25
첫 애플리케이션 만들기  (0) 2019.04.14
React native 설치  (0) 2019.04.14

http://book.interpark.com/product/BookDisplay.do?_method=detail&sc.shopNo=0000400000&sc.prdNo=243946565&sc.saNo=003002001&bid1=search&bid2=product&bid3=img&bid4=001

 

싸니까 믿으니까 인터파크도서

이 책에는 개인적인 일화와 현장 경험에서 비롯된 무게감 있는 조언이 가득하다. 저절로 "맞아, 그랬었지. 그렇게 했었지."라고 탄식하며 나와 크게 다르지 않은, 저자의 쓰디 쓴 경험들이 마음 한켠에 위로가 될 것이다. 아픔에 대한 책이기도 하다. 당신과 나 그리고 모든 프로그래머가 겪는 아픔을 생생하게 전달한다. 수준 이하로 일을 마무리했던 경험, 전혀 프로답지 않았던 경험, 더 나아지고 싶지만 어떻게 해야 하는지 몰랐던 아픔 등에 관한 일화와 그 치유법

book.interpark.com

개인적으로 이 책을 좀 더 빨리 읽어 보지 못 했던 것이 아쉽다. 실무 경험이 적은 학생들이나 사회초년생에게는 와닿는 부분이 적을 수 있으나 최소 TDD, 애자일 등 주요 키워드에 대한 개념 정도만이라도 선행 후 읽어 본다면 느끼는 바가 많을 것이라고 본다. 

 

몇 년 개발을 해보면서 느끼는 바로 꾸준한 프로젝트 관리, 빈틈 없는 테스트 등 좋은 습관이 좋은 프로그램을 만든다. 모듈 구현이라는 나무보다 개발이라는 숲을 보고 싶은 개발자라면 꼭 읽어보길 권장한다.


레거시코드
기술적 실행 관례
TDD, XP
애자일
페어프로그래밍

'이야기' 카테고리의 다른 글

테스트 주도 개발 Test-Driven Development  (0) 2019.05.09
안녕하세요.  (0) 2019.03.01

http://book.interpark.com/product/BookDisplay.do?_method=detail&sc.prdNo=214078987

 

싸니까 믿으니까 인터파크도서

생년월일 - 출생지 - 출간도서 0종 판매수 0권 현재 애자일 컨설팅 대표이며, 애자일 이야기(http://agile.egloos.com)라는 블로그를 운영하고 있다. 또한 2002년에 한국 XP 사용자 모임(http://xper.org)을 설립했다. 삼성전자, LG전자, 다음커뮤니케이션, NHN, 한미 연합사령부, SKT, LG U+, 엔씨소프트 외 여러 조직에 애자일 방법론을 중심으로 더 생산적이고 행복하게 일하게 도와주는 컨설팅, 교육, 코칭을 제공

book.interpark.com

 

TDD의 필요성과 쉬운 예제를 통해 감을 잡는데 좋은 교재라고 생각한다. TDD에 대한 개념이 확립되지 않았다면 '소프트웨어 장인' 책을 읽고 TDD의 필요성을 느끼고 읽어보는 것을 추천한다. 1장의 예제는 아주 간단한 코드로 작성되어 있어 천천히 따라하면서 이해해보길 권장한다. 

 

1부 자바로 다중 통화 코드를 작성

-> 예제를 통해 TDD의 처음부터 끝까지를 진행해 본다. 
2부 파이썬으로 단위 테스팅 프레임워크를 작성

-> 파이썬으로 xUnit이라는 자바의 JUnit 같은 테스팅 프레임워크를 직접 작성
3부 테스트 주도로 개발할 때 자주 등장하는 패턴들을 정리 - 번역자의 노하우를 담은 'TDD 수련법', '실전 TDD' 원고 추가

-> 리팩토링, 디자인 기법 등 TDD를 베이스로 응용사례를 소개

 

테스트의 숨은 짧게 가져간다 (녹색바를 빨리보기)
'작동하는 코드'를 먼저 만들고 '깔끔한 코드'를 만든다.
 
TDD의 주기
1. 작은 테스트를 추가한다
2. 모든 테스트를 실행하고, 실패하는 것을 확인한다.
3. 코드에 변화를 준다.
4. 모든 테스트를 실행하고, 성공하는 것을 확인한다.
5. 중복을 제거하기 위해 리팩토링한다.

테스트를 확실히 돌아가게 만드는 세 가지 접근법
1. 가짜로 구현하기 (명백한구현,가짜구현 : 일반적인 방식)

2. 삼각측량법 (삼각측량 (5 == 5, 5 != 6) : 어떻게 테스트를 구현해야할지 모를때)

3. 명백하게 구현하기

* 설계를 주도하기 위한 방법으로 테스트 코드와 실제 코드 사이의 중복을 제거하기
길이 미끄러우면 속도를 줄이고 상황이 좋으면 속도를 높이는 식으로 테스트 사이의 간격을 조절할 수 있는 능력.

xUnit(파이썬 테스트케이스 검증 툴)
setUp(self): //테스트 셋팅
self.file = File("foo").open()
testMethod(self):
..test...
tearDown(self):  //테스트 마무리
self.file.close()

 

TestSuite : 모든테스트가 동작하는지 확인 
fixture : 테스트 시 여러번 사용되는 인스턴스 변수  

 


테스트한다는 것은 무엇을 뜻하는가
테스트를 언제 해야 하는가
테스트할 로직을 어떻게 고를 것인가
테스트할 데이터를 어떻게 고를 것인가

*나중에 누군가 이 테스트를 보고 코드를 이해할 것을 기대하고 짠다. 


assert를 먼저 구현(어떤 결과를 원하는가)
시퀀스다이어그램에서 모든 콜에 대해 테스트를 짜본다
회귀테스트 : 어떤문제가 발생한뒤 방어차원의 테스트코드 추가
모의객체는 하나의 위험요소가 될 수 있다.
작업을 불완전한 상태에서 마무리하기

패턴
커맨드 - 계산 작업에 대한 호출을 메세지가 아닌 객체로 표현 : runnable
값객체 - 객체가 생성된 이후 그 값이 절대로 변하지 않게 하여 별칭 문제가 발생하지 않게한다. : 동일과 동등
널객체 - 계산 작업의 기본 사례를 객체로 표현
템플릿메서드 - 계산 작업의 변하지 않는 순서를 여러 추상메서드로 표현
플러거블객체 - 둘이상의 구현을 객체를 호출함으로써 다양성 표현
팩토리 메서드 - 생성자 대신 메서드를 호출함으로써 객체를 생성 : 객체의 유연함
임포스터 - 현존하는 프로토콜을 갖는 다른구현을 추가하여 시스템에 변이를 도입
컴포지트 - 하나의 객체로 여러 객체의 행위 조합을 표현
수집매개변수 - 여러 다른 객체에서 계산한 결과를 모으기 위해 메개 변수를 여러곳으로 전달

리팩토링
차이점 일치시키기, 변화 격리하기, 데이터 이주시키기, 메서드추출하기, 메서드 인라인, 인터페이스추출, 메서드옮기기, 메서드객체

'이야기' 카테고리의 다른 글

소프트웨어 장인 : 프로페셔널리즘, 실용주의, 자부심  (0) 2019.05.09
안녕하세요.  (0) 2019.03.01

+ Recent posts