메뉴 건너뛰기

Hodol's Blog

Documents 삽질노트[20160731]

2016.07.31 04:52

Hodol 조회 수:124

삽질노트 20160731

 
React.js 처음 배움
  • React.js는 페이스북에서 개발된 자바스크립트 라이브러리로 화면에 그리는 것만 담당한다.
  • Component base의 작업 방식으로 각 Component들을 조립하는 방식이다.
  • Virtual DOM이라는 가상 DOM 객체를 이용하여 페이지의 데이터 변경 시 화면을 다시 그릴 때 가상의 DOC tree에 미리 그린 후, 바뀐 부분만 스왑하는 방식이다.
  • One way data binding: 중요한 부분이다. 두 객체가 바인딩 됐을 때, 한 쪽이 바뀌면 다른 쪽이 바뀌는 것이 일반적이다. 그러나 이렇게 되면 복잡한 스크립트에서는 어떤 객체가 데이터를 바꾸었는지를 역으로 추적하기가 어렵다. 따라서 한 객체가 데이터를 변경 후 추가적으로 데이터 변경을 명시해줌으로써 데이터 추적을 쉽게 해준다. 마치 데이터베이스 데이터를 변경하는 것과 비슷하게 작동한다.
  • JSX: 로직을 사용하는 부분이다. Javascript 내에서 XML을 사용하므로 HTML보다 엄격한 문법이 적용된다. JSX를 통해 UI를 표현하고 Babel을 통해서 해석한다. 속성 이름은 camelCase로 작성하는 것이 일반적이다. XML이므로 최상위 단일 루트가 있어야 한다.
  • this: React.js에서 this가 무엇을 가리키는지를 알기가 무척 햇갈린다. 보통 인스턴스화된 component 자기 자신을 가리킨다고 생각하면 된다.
  • Componentstates(상태값)들과 props(속성값)들로 이루어져 있다. states는 컴퍼넌트 자기자신의 상태에 대한 값을 나타내고 setState를 통해 자신의 상태를 변경하여 해당 상태 기준으로 화면이 다시 그려진다. props는 컴포넌트 렌더링 시, 렌더링하는 측에서 렌더링할 컴포넌트에 속성형태로 넘겨주는 값들이다. 보통 XML 태그의 속성으로 기술된다. props를 받아서 사용하는 쪽에서는 props를 고치면 안딘다. props의 기준이 되는 데이터가 변경되는 경우, 연결된 props도 모두 갱신이 되며 해당 Component가 다시 그려진다.
  • propsType: props의 변수형을 정의할 수 있다. 사용하는 것이 좋다.
  • Event System: UI 상호작용이 있는 곳에 onXXX 형태로 이벤트를 연결한다.
  • 참고 자료: http://slides.com/roto/hello-react-js
JAVA 관련
  • import static 구문을 통해 Static으로 패키지 임포트할 수 있다.
  • 자바의 enum은 클래스이다. Enum의 값들도 클래스인 enum의 인스턴스이다.
  • 스레드는 동시성을 확보하고 큰 자원을 소모하는 프로세스 분리함으로써 다른 프로세스들이 기다리지 않게 하기 위해 사용한다.
객체 지향 프로그래밍 관련
  • 추상화: 문제를 어떻게 클래스로 표현해는가? 여러 개체들로부터 공통 속성을 뽑아내는 방법을 제공하는 것이 클래스이다.
  • 캡슐화: 정보의 영역 한정한다. 정보를 은닉하고 정보의 접근 제어한다. 프로그래머가 클래스 내부의 동작 메커니즘을 속속들이 알 필요없이 공개된 정보만 이용하여 생산성을 높일 수 있다.
  • 상속: 클래스를 재사용 및 확장할 수 있도록 지원을 해야한다.
  • 다형성: 같은 이름의 메서드를 호출하더라도 부모에서 호출될 때와 자식에서 호출될 때 서로 다른 기능을 할 수 있어야 한다.
  • 접근 변경자
    • private: 해당 클래스의 메서드만 접근할 수 있다.
    • default: 해당 클래스가 속하는 패키지에서만 접근할 수 있다.
    • protect: 해당 클래스를 상속하는 상속자까지 접근할 수 있다.
    • public: 어느 곳에서든 접근 가능하다.
  • 클래스의 오브젝트(객체)가 인스턴스이다.
안드로이드 관련
저장소
  • 내부 저장소는 루트의 권한이 필요하다.
  • 앱들은 내부 저장소에 설치된다. 각 앱마다 캐시 저장 영역 (/data/data/[PackageName]/cache), 데이터베이스 저장 영역 (/data/data/[PackageName]/databases), 일반 파일 저장 영역 (/data/data/[PackageName]/files)를 가진다.
  • 외부 저장소는 외부의 슬롯 메모리만을 의미하지 않는다. 권한이 있어야 접근이 가능하다.
  • 외부 저장소 경로는 보통 /mnt/sdcard이며 사용하기 전에 꼭 마운트되어 있는지를 체크 후 접근하도록 한다.
  • 앱마다 외부 저장소에 폴더를 가진다.
  • 어떤 앱의 캐시 저장 영역의 경로는 /mnt/sdcard/Android/data/[PackageName]/cache이다.
Thread 관련
  • Only the original thread that created a view hierarchy can touch its views.
    메인 스레드에서 실행되지 않는 스레드가 있을 경우 나타나는 에러 메세지이다. 자주 하는 실수이며 handler을 사용하여 해결한다.
기타
  • TextView.setText(intTypeVariable);에서 intTypeVariableR.string.textId와 같은 리소스 아이디값을 받기 위한 것이다. 실제로 int형의 변수를 넣으면 컴파일 시 에러가 나타나지 않지만 앱을 실행하면 에러가 나타난다.
Javascript Style 관련 다음과 같이 브라우저가 렌더링을 한 후의 DOM 객체의 스타일을 얻어올 수 있다.
var style = window.getComputedStyle(element);
console.log(style.width);
기타
  • Visual Studio 유니코드 / 멀티바이트 문자해결: 프로젝트 속성 > 구성 속성 > 일반 > 프로젝트 기본값 > 문자집합 > 유니코드/멀티바이트에서 문자 집합 선택으로 유니코드 문제를 해결할 수 있다.
  • Visual Strudio 컴파일 시, 외부 기호를 확인할 수 없습니다.라는 에러는 호출한 메서드가 어느 클래스의 메서드인지 판별할 수 없을 때 나타난다. 호출된 메서드 앞에 클래스 범위 지정자를 붙여줌으로써 해결할 수 있다.
  • 함수형 언어의 함수는 파라미터로 넘어온 변수값을 변경하지 않는다. 그리고 값을 리턴한다.