라벨이 개발인 게시물 표시

dart (flutter) 문법 - 클래스. class, abstract, implements, factory

클래스 기본 예제. dart에서는 단일 상속만 가능하다. class Point { double? x ; double? y ; // 이름 없는 생성자 . 하나만 가능하다 . Point(double x , double y) { this . x = x ; this . y = y ; } // 이름있는 생성자 . Point. init () : x = 0 , y = 0 { } // 이름 없는 생성자 호출 . Point. init2 () : this ( 0 , 0 ) { } int GetV () { return 1 ; } } class Point3D extends Point { final bool i3D = true; double z = 0 ; // 생성시 부모 클래스 생성자 호출 . Point3D(double x , double y , double z) : super (x , y) { this . z = z ; } // 부모의 함수를 재정의 할 수 있다 . @override int GetV () { return 2 ; } } void main () { var p1 = Point ( 2 , 2 ) ; var p2 = new Point3D ( 2 , 2 , 2 ) ; print( 'The type of a is ${p1. runtimeType } ' ) ; } 추상 클래스. 인스턴스화 되지 않는 클래스로 주로 인터페이스 정의에 사용된다. abstract class AbstractContainer { void updateChildren () ; // 추상 함수 . } class ClassA extends AbstractContainer { // 추상 함수 정의 . void updateChildren () {} } implements (인터페이스) 상속받지 않고 다른 클래스의 인터페이스를 지원할 수 있다. 여러 클래스의 인터페이스를 지원합니다.

dart (flutter) - 함수.

알림 - dart는 함수 표현법이 다양합니다.  이 문서에서는 제가 선호하는 유형만 다룹니다. 아래 3가지 함수는 동일한 동작의 함수 입니다. bool isOne (int one) { return one == 1 ; } isOne2 (one) { return one == 1 ; } bool isOne3 (int one) => one == 1 ; 보통 함수. // 호출 . int n = test( true, 1 ) ; // 정의 . int test (bool isB , int numN) { return numN ; } 이름 있는 함수. test2 (isB: true, numN: 1 ) ; test2(numN: 1 ) ; // test2(true, 1); // error // {} 로 둘러싸면 호출시 변수명을 명시해야 한다 . void test2({bool? isB , int? numN}) {} test2_1 (isB: true, numN: 1 ) ; test2_1(isB: true ) ; // error test2_1(numN: 1 ) ; // required 를 붙여주면 실행하는데 꼭 필요한 함수 . void test2_1({bool? isB , required int numN}) {} 옵션 인수 함수.   test3(true, 1);   test3();   test3(false); // [] 로 둘러싸면 호출시 인수를 입력하지 않으면 기본값을 지정해 줍니다. void test3 ([bool isB = true, int numN = 1 ]) {} forEach 에서 익명함수. var intList = [ 1 , 2 , 3 ] ; intList.forEach((item) { print(item) ; }) ; int List.forEach((item) => print(item)) ;

dart (flutter) 문법 - typedef.

// 기존 타입의 별칭을 만들수 있다 . typedef IntList = List<int> ; // 함수의 형태를 타입으로 사용 가능 . typedef Compare(int n , int m) ; bool maxLeft (int a , int b) { return a > b ; } bool compareAB (int a , int b , Compare cp) { return cp(a , b) ; } void main () { IntList il = [ 1 , 2 , 3 ] ; int a = 2 ; int b = 1 ; bool isLeftMax = compareAB(a , b , maxLeft ) ; }

dart (flutter) 문법 - 제어문. if, for, forEach, switch

- if 문. if (isRaining()) { you.bringRainCoat() ; } else if (isSnowing()) { you.wearJacket() ; } else { car.putTopDown() ; } - for, forEach 문. var message = StringBuffer ( 'Dart is fun' ) ; for ( var i = 0 ; i < 5 ; i++) { message.write( '!' ) ; } for ( final candidate in candidates) { candidate.interview() ; } var collection = [ 1 , 2 , 3 ] ; collection. forEach (print) ; // 1 2 3 - while, do while 문. while (!isDone()) { doSomething() ; } do { printLine() ; } while (!atEndOfPage()) ; - switch 문.  test () { var command = 'OPEN' ; switch (command) { case 'OPEN' : executeOpen() ; break; default : executeUnknown() ; } } 참고. https://dart.dev/guides/language/language-tour#control-flow-statements

dart (flutter) - 예외.

test () { try { throw OutOfLlamasException( 'Expected at least 1 section' ) ; throw 'Out of llamas!' ; } on OutOfLlamasException { // A specific exception buyMoreLlamas() ; } on Exception catch (e) { // Anything else that is an exception print( 'Unknown exception: $e ' ) ; } catch (e) { print( 'Error: $e ' ) ; // Handle the exception first. } finally { cleanLlamaStalls() ; // Then clean up. } }

dart (flutter) 문법 - 연산자.

* 주의 설명과 연산자의 구분자는 '=>' 입니다. 단항 접미사 => expr++    expr--    ()    []    ?[]    .    ?.    ! 단항 접두사 => -expr    !expr    ~expr    ++expr    --expr      await expr    곱셈 나눗셈 => *    /    %  ~/ 더하기 빼기 => +    - 비트 쉬프트 => <<    >>    >>> 비트연산자 AND => & 비트연산자 XOR => ^ 비트연산자 OR => | 값비교 및 형식비교 =>  >=    >    <=    <    as    is    is! 같은지, 다른지 => ==    !=    논리 AND => && 논리 OR => || null 인지 => ?? 삼항 연산자 => expr1 ? expr2 : expr3 캐스케이드(동일한 인스턴스 멤버 호출 가능.) => ..    ?.. 할당연산자 => =    *=    /=   +=   -=   &=   ^=   etc. 참고. https://dart.dev/guides/language/language-tour#operators - 단항 접미사, 단항 접두사, 곱셈 나눗셈, 더하기 빼기, 할당연산자 int i = 1; i++; // i == 2 i = 1; int y = i + i; // i == 2 i = 1; int y = i * i; // i == 1 i = 1; i += 2; // i == 3 - 비트 쉬프트, 비트연산자  int i = 1; // 예를  들어 1의 비트가 0001 이라면 i << 1; // 연산으로 0010가 되고 int값으로 2가 됨. 1 | 2; // 0001 | 0010 = 0011 이 되고 int값으로 3이 됨. - 값비교, 논리 (3 ==

dart (flutter) 문법 - 주석.

void main() {      // 주석1      /*     * 주석2 - 여러줄.    */   /// 주석으로 문서를 직접 만들수 있다.    /// 마크다운도 지원   /// 문서화에 대한 자세한 사용법은 아래 링크 참조.   /// https://dart.dev/guides/language/effective-dart/documentation }

dart (flutter) 문법 - final, const 차이.

final, const  공통점 - 초기값을 할당한 이후 값 변경할 수 없다. 차이 - const는 컴파일 타임에 상수화 된다. 초보는 이해하기 어려울 수 있다. const는 초기화시에 항상 값을 대입해야 한다는 것만 알면 된다. 예) const int i2 = 123; void main () { final int i = 123 ; //i = 456; // Error const int i2 = 123 ; //i2 = 456; // Error final int i3 = getInt() ; /* * const 는 컴파일 시점에 상수화되어 * 런타임에 초기값을 넣을수 없다 . */ const int i4 = getInt() ; // Error } int getInt () { return 5 ; }

dart (flutter) 문법 - 데이터 타입.

데이터 타입. int, double, num, String, bool, Lists, Set, Map, ,Runes void main () { int i = 123 ; // 정수형 . double d = 1.23 ; // 실수형 . num n1 = 123 ; // num 은 정수 , 실수 모두 가능 . num n2 = 1.23 ; String s1 = 'abc' ; // 문자열 . String s2 = 'abc $n2 ' ; // 문자열에 변수 입력 가능 . print(s2) ; print(s2. runes ) ; // 문자열을 UTF-16 인코딩 bool b = true; // 참과 거짓 . b = false; List l = [ 1 , 2 , 3 ] ; // 배열 , 중복가능 . print(l[ 0 ]) ; // 중복불가 . 이외에도 여러가지 구문으로 초기화 가능 . Set<String> se = { 'a' , 'b' , 'c' } ; // ( 키 , 값 ) 으로 조합 , 키는 중복 불가 . 초기화 구문 다양함 . Map<int , String> m = { 1 : '11' , 2 : '22' , 3 : '33' } ; print(n2) ; }

dart (flutter) 문법 - dynamic, var 차이.

dynamic - 항상 다른 타입을 허용한다. var - 처음 추론된 타입만 허용된다. // dynamic 예제 . void main () { int a = 123 ; String b = 'abc' ; dynamic test = a ; test = b ; // 다른 타입도 허용된다 . print(test) ; } // var 예제 . void main() { int a = 123 ; String b = 'abc' ; var test = a ; test = b ; // Error 다른 타입이 허용되지 않는다 . print(test) ; }

가벼운 git 클라이언트 SourceGit

이미지
https://github.com/sourcegit-scm/sourcegit 1메가보다 작은 실행파일 하나인 GIT클라이언트. git명령어를 래핑한 가벼운 프로그램이다. 소스가 깔끔하고 구조가 쉽게 잘되어 있으니 필요한 기능이 있다면 추가하기 쉽다. 따로 설치할 필요없고 실행파일 하나만 복사해서 사용하면 된다. 사전에 git, .net6.0 이 설치되어 있어야 한다. - git https://git-scm.com/   - .net6.0 https://dotnet.microsoft.com/en-us/download/dotnet/6.0 윈도우나 visual studio에 사전 설치되어 있을 수 있으니  실행해 보고 안되면 그때 설치하면 된다.

dev.azure.com에서 초대 오류 해결 error 401

- 문제. dev.azure.com 에서 조직을 만들고 프로젝트를 설정한 뒤  동료와 공동작업을 위해 조직에 초대를 했는데  자꾸 401 오류가 났습니다. - 시도. 유저 삭제 후 다시 초대  웹검색으로 브라우저 시크릿 모드, 쿠키 모두 날리기, 새로운 브라우저 설치 후 시도  등 여러 방법을 했지만 오류가 났습니다. - 해결. 요약 - MS계정에 github 연결을 풀고 다시 초대해서 해결 했습니다. MS계정에 github가 연결되어 있어 연결을 풀었습니다. https://account.microsoft.com/security 에 접속해 "고급 보안 옵션" 을 누르고 github 연결을 해제하면 됩니다. 이후 dev.azure.com -> 조직 옵션 -> 유저 에서 해당 유저를 삭제후 다시 초대하면 됩니다. - 참고. https://developercommunity.visualstudio.com/t/unable-to-accept-invite-from-devazurecom-error-401/1684419

책리뷰- 플러터 앱 개발 첫걸음(2020)

플러터 개발에 필요한 부분을 광범위하게 다루고 있습니다. 한권쯤 레퍼런스로 소장하면 좋을 책 입니다.

책리뷰- 모바일 앱 개발을 위한 다트&플러터 (2020)

플러터 입문자에게 추천한다. 다트와 플러터를 기초부터 설명한다. 책 내용이 아주 쉽다. 다트 문법부터 시작해서 플러터 개발환경, 위젯으로 이어지며 간단한 어플 만들기에 필요한 부분은 대부분 다룬다. 순서와 구성이 좋다.

책리뷰- 리눅스 커널 내부구조 : 리눅스 해커를 위한 지침서(2015)

리눅스의 구조와 동작을 간략하게 설명하는 책이다. 대학 강의하듯이 학부생 눈높이에 맞춰 쉽고 간단하게 설명해서 입문자에게 좋다. 특히 각 장의 첫부분에 동작을 간략히 정리해 설명하는 부분이 좋았다. 자세한 동작이야 소스를 직접보면 되는 것이라 대략의 구조와 동작에 대해 어떻게 되어 있는지 설명해 주는 그 짧은 부분이 엑기스 였다.  숙련된 엔지니어의 짬에서 나오는 통찰력의 느낌이다. 모든 부분이 아닌 중요한 부분만 찝어 설명하는 것이 좋았다. 리눅스 드라이버 설치에 대해 이해 안됐었는데 이 책으로 이해할 수 있었다. 리눅스는 모듈을 만들어 실행 중인 커널에 적재할 수 있다. 모듈로 커널의 기능을 추가하거나 변경할 수 있다. 모듈은 간소화된 DLL과 비슷한 거 같다. 모듈에 드라이버 기능을 구현해서 커널에 적재하면 된다. 단점이 있다면 그림이 너무 옛날 그림이라 촌스러웠고, 자세한 동작도 글로만 설명하니 몇몇 부분은 몇번씩 읽어봐야 했다.

책리뷰 - CODE Reading(2004)

코드를 읽는 법에 대한 책. 이 책의 주 대상은 c로된 오픈소스 프로젝트에 참여하고 싶은 개발자 입니다. 다른 언어를 사용한다면 정말 쓸모 없으니 보지 않는 걸 추천합니다. 유명한 저자가 코드를 읽으면서 그간의 경험을 바탕으로 쓴 책입니다. 하지만 오픈소스와 c에 한정되어 있습니다. 1-2년차 개발자는 볼만하고 5년차 정도면 건질게 거의 없을겁니다.

nginx 소스 간단 리뷰.

- 두가지 목적으로 리뷰. http 헤더 처리시 까지 보안관련 코드.(호기심) 뜯어서 다른걸로 개조할 수 있을지 여부확인. 많은 사용으로 안전성이 확보된 코드. - 과정. vs code에 c언어 확장을 설치. 아래 참고 링크에 있는 콜스택을 참조하여 코드 리뷰. 콜스택과 약간 다른 부분이 있었지만 전체 콜스택이 있으므로 어렵지 않게 중간 함수를 찾을 수 있었다. - 결과. http 헤더 처리 코드까지 별다른 보안 코드는 없었다. c로 개발되어 있어 재활용이 어렵고 새로 개발 했을 때 안전성이 깨지게 되어 nginx소스를 사용하는 이유가 없어짐.  - 감상. c++도 아니고 c로 개발되어 있다. 개발자 입장에서 보면 다른데 신경쓰지 않고 서버를 만드는데만 집중한 거 같다. 성능을 최우선으로 자잘한 부분까지 쥐어짠 흔적들이 보인다. goto문은 개발자들에게 거의 금기시 되어 있는데 goto문을 사용하여 코드의 양을 줄이고 복잡도도 낮아졌다. 검색해보니 중국 개발 사이트들이 보였는데 개발자도 많은지 정말 다양한 분야에 대한 글들이 보였고 꽤 활발했다. github에 중국어로 올리는데 이게 대국의 기상인가 싶다.  참고. https://taohui.blog.csdn.net/article/details/5637451 http://tengine.taobao.org/book/chapter_12.html

시대와 환경이 변했으면 개발 철학도 바껴야 한다.

리눅스 프로그램들을 설치하다 보면 종속성 대환장 파티가 열린다. 오죽하면 openmediavault 같은 배포판들은 도커를 기반으로 플러그인을 설치한다. 이런 종속성은 시스템 유지보수, 보안에 심각한 영향을 미친다. 윈도우 DLL 보안 사고가 끊이지 않고 터지는 거처럼 말이다. 유닉스는 70년대에 열악한 하드웨어와 저장장치 용량 때문에 작은 프로그램을 만들고 이를 이용해 프로그램을 만들어 쥐어 짜듯 개발했다.  하지만 현재는 100기가 가까이 하는 게임이 나올 정도로 저장장치가 비약적으로 늘어났다.  현재는 정적링크로 프로그램 크기가 늘어나도 별 문제가 안되고 cpu 성능도 비약적으로 향상돼 프로그램 크기가 늘어도 로딩 속도에 큰 문제가 되지 않는다. 시대와 환경이 변했으면 개발 철학도 바껴야 한다. IOS의 정적링크와 외부 폴더 접근을 막는 현대적 개발철학이 필요하다.  윈도우도 dll 그만 쳐 쓰고 폴더 접근의 제한 강화해라. 결정권을 쥐고 있는 노땅들이 바껴야 한다.

책리뷰- Do it! 리액트 네이티브 앱 프로그래밍 (2021)

 저자가 꽤 공들여 작성한거 같은 책이다. 하지만 머리에 잘 들어오지 않았다. 생각해 보니 장황한 설명으로 인해 머리가 복잡해 지는거 같다. 기능을 정의할때보면 역사와 자초지정을 전문용어를 섞어서 설명한다. 아마 책으로 만들다 보니 독자를 의식해서 그런거 같은데 독자를 의식하지 않고 자신이 이해하기 쉬운 문장으로 설명하면 더 좋았을거 같다. 그리고 강약조절이 잘 안됬다.  엔지니어로써 만들면서 꼭 필요한 부분은 몇 부분 되지 않는다. 이런 부분을 강조하고 나머지는 쳐내거나 작게 다뤄야 하는데 그렇지 않은거 같다. 총평. 방대한 영역을 다루니 레퍼런스로 필요한 부분만 발췌해서 읽는걸 추천한다. 리액트를 처음부터 배우는 사람이라면 추천하지 않는다. 좀더 읽기 편하고 체계적인 책을 보는게 나을거 같다.

함수형 자바스크립트 입문 2/e (2020)

자바스크립트 함수에 대해 특화되어 있는 책. 설명이 잘 되어 있기 때문에 함수를 많이 다뤄보지 않은 초보에겐 좋다. 람다 형태의 함수를 다루는데 익숙하다면 추천하지 않는다. 장점은 초보에게 설명이 잘 되어 있다. 단점. 예제를 부분부분 짤라서 보여주기 때문에 한눈에 들어오지 않는다. 소설처럼 기능을 전개하며 풀어가는 형식이기 때문에 한눈에 보이게 정리되어 있지 않다. 프로젝트 초기 설정에 대한 중복은 불필요한 부분이다. 어느정도 경험 있는 프로그래머에겐 시간 낭비하게 하는 구성이다. 총평. 초보에겐 추천. 다른 자바스크립트 입문 서적을 본후에 함수에 대해 더 알고 싶을때. 경력자에겐 비추천.