cording-cossk3의 등록된 링크

 cording-cossk3로 등록된 티스토리 포스트 수는 215건입니다.

티스토리 구글 애드센스 구글 애널리틱스 연동하기 [내부링크]

구글 애널리틱스에 티스토리 애드센스를 연동할 수 있다는 정보를 듣고!! 바로 실천해버리는 나 :) 우선, 구글 애드센스와 구글 애널리틱스 연동하기 01. 구글 애널리틱스 접속하기 https://analytics.google.com/analytics/web/#/p318068548/reports/intelligenthome Redirecting... analytics.google.com 02. 좌측 하단 [관리] 버튼 클릭! 03. 속성 란에 보니까 [애드센스 링크] 라는 메뉴가 있어야 하는데 없다... 그럼 당황해하지 말고 [+ 속성 만들기] 클릭! 04. 속성 이름 넣어주고, 시간대는 대한민국으로 설정! 그리고 중요한건 하단에 [고급 옵션 보기] 클릭! 05. 그럼 다음과 같이 [유니버셜 애널리틱스 속성..

네이버 서치어드바이저 RSS 및 사이트맵 제출 방법 [내부링크]

네이버 서치어드바이저 RSS 및 사이트맵 제출 방법 01. 네이버 서치어드바이저 검색해서 들어가기! 또는 링크 클릭하기 >>네이버 서치어드바이저 바로가기 [사이트맵 제출] 클릭! url은 내사이트/sitemap.xml 로 넣으면 된다! 간단해서 좋다!~!!! 구글 애널리틱스 연동하기 https://cording-cossk3.tistory.com/234 티스토리 구글 애드센스 구글 애널리틱스 연동하기 구글 애널리틱스에 티스토리 애드센스를 연동할 수 있다는 정보를 듣고!! 바로 실천해버리는 나 :) 우선, 구글 애드센스와 구글 애널리틱스 연동하기 01. 구글 애널리틱스 접속하기 https://analytics. cording-cossk3.tistory.com

네이버 검색엔진 최적화 - robots.txt 접근 차단 해결 방법 [내부링크]

네이버 서치어드바이저를 통해서 내 사이트를 등록하던 중 내 사이트를 진단할 수 있길래 해보았다. 우선 네이버 서치 어드바이저 사이트를 들어가보자! >> 네이버 서치 어드바이저 바로가기 네이버 서치어드바이저 RSS 및 사이트맵 제출 방법 네이버 서치어드바이저 RSS 및 사이트맵 제출 방법 01. 네이버 서치어드바이저 검색해서 들어가기! 또는 링크 클릭하기 >>네이버 서치어드바이저 바로가기 [사이트맵 제출] 클릭! url은 내사이트/si cording-cossk3.tistory.com

티스토리 블로그 구독하기 버튼 눌러도 구독이 되지 않을 때 해결 방법 [내부링크]

요즘 사람들과 맞구독을 하다 보니 구독이 되지 않는 분들이 꽤 있었다.! url을 보면 xxx.tistory.com 이 아니라 xxx.com 으로 되어 있었다. 그래서 .com 을 .tistory.com으로 변경해서 다시 로드하면 구독하기 눌러도 되는 분들이 꽤 있었는데 유독 안되는 몇몇 분들이 있었다!! 이런건.. 참을 수 없지 바로 구글링해야지 해당 블로그에서 [Ctrl + U] 를 누르거나 [오른쪽 마우스 + 페이지 소스 보기] 를 선택한다. 그럼 html로 작성된 페이지 소스들이 보이는데! 거기서 Ctrl + F로 단어를 찾아야 한다 mobile_view_url" content=" 그럼 아래와 같이 찾을 것이다. content = "URL" 에서 URL만 긁어와 다시 붙여넣기를 하고 구독하기를 누..

구글 애드센스 광고 단가 확인하기 [내부링크]

방문자 수는 늘고, 광고 클릭 수도 늘고 있는데 애드센스 수익은 0.3, 0.4로 찍힐 때가 있다... 왜지 ?! 그동안 간간히 클릭 수가 1이 되어도 높게는 1.5 정도까진 수익이 들어왔었는데 ㅠ.ㅠ 이유가 궁금해서 나는 구글 애드센스 광고 단가를 찾아보기로 했다. 혹시 쩌리 블로그라.. 광고 단가를 적게 준건 아닐지 해서.. 01. 구글 애즈 접속 및 로그인 구글 애즈에서 광고 단가 확인이 가능하다고 한다! >> 구글 애즈 바로가기 [키워드 플래너] 클릭 07. 새 키워드 찾기 클릭 08. 원하는 키워드 입력 후 [결과 보기 클릭] 09. 관련 키워드와 그에 따른 광고 단가가 나온다. 제일 좋은 검색 키워드는 검색량 단가 경쟁률 에 해당하는 키워드라고 한다! 이따 퇴근하고 분석 좀 해서 키워..

[Android] A failure occurred while executing com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable 이슈 해결 [내부링크]

기능 추가 작업 및 로그 추가를 하고 apk를 생성하려는데 정말 짜증나게도 위와 같은 에러가 나면서 생성이 안됐다. 그래서 구글링을 해본 결과... 1. 첫 번째 해결 방법 gradle.properties 파일에서 org.gradle.jvmargs=-Xmx2048M >> org.gradle.jvmargs=-Xmx2g 이렇게 사이즈를 늘려보라길래 했더니 정말 됐다! 근데 그것도 잠시뿐... 또 기능 추가 후 apk 생성하려하면 똑같은 에러가 떴다. 여기서 1차 빡침... 2. 두 번째 해결 방법 필요없는 코드를 지우고, 필요없는 파일들을 지워봤다. 근데 이것도........ 되긴 되는데 잠시 후 또 코드 한 줄 추가해도 에러뜬다 ㅠ.ㅠ 3. 세 번째 해결 방법 sdk 버전 높이기! build.gradle(..

[Android] apk 빌드 에러 > The minSDK Version can not be specified in the AndroidManifest.xml file. [내부링크]

apk를 생성하려고 하는데 다음과 같은 에러가 발생했다. Execution failed for task ':app:lintVitalRelease'. > Lint infrastructure error Caused by: java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethod..

[C/C++] 소수점 n자리 출력, 정수 및 소수점 0 채우기 [내부링크]

지식인 둘러보다가 다음과 같은 질문을 발견했다. 생각해보니 저렇게 출력해 본 적이 없어서 나도 의문이었다. 저렇게 출력을 하는 방법이 있나 ? 근데 있었다! #include int main() { printf("%05.2f\n", 5.12345); return 0; } >> 05.12 소수점을 포함한 5자리 수 출력을 하는데, 그 중에 소수점 자리는 2자리 출력, 나머지는 0으로 채운다는 의미 같다. 그렇다면, 만약 이렇게 코딩을 하면 결과는 어떻게 나올까? #include int main() { printf("%010.5f\n", 5.123); return 0; } 10자리 중 소수점 자리는 5자리 출력이니, 0005.12300 이렇게 나올 것이다!! 오늘도 유용한 지식 알아간다.

유용한 온라인 컴파일러 사이트 [내부링크]

가끔 지식인 답변을 해주다가 c/c++ 컴파일이 필요할 때 내 pc에서는 환경 설정이 되어있지 않아 곤란할 때가 있다. 그럴때 내가 유용하는 사이트 https://replit.com/languages/c C Online Compiler & Interpreter Write and run C code using our C online compiler & interpreter. You can build, share, and host applications right from your browser! replit.com 은근 괜찮다 (최고)

[C언어] byte를 0과 1로 출력 / binary 출력 (byte to binary) [내부링크]

byte 보다는 8bit로 출력을 하고 싶을 때가 있다. #define BYTE_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c\n" #define BYTE_TO_BINARY(byte) \ (byte & 0x80 ? '1' : '0'), \ (byte & 0x40 ? '1' : '0'), \ (byte & 0x20 ? '1' : '0'), \ (byte & 0x10 ? '1' : '0'), \ (byte & 0x08 ? '1' : '0'), \ (byte & 0x04 ? '1' : '0'), \ (byte & 0x02 ? '1' : '0'), \ (byte & 0x01 ? '1' : '0') 위와 같이 define으로 정의해두고 쓰면 유용하다.!

[Flutter] Google Map API Release 시 뜨지 않는 이슈 [내부링크]

이런... 오전부터 개삽질했다. https://cording-cossk3.tistory.com/198 [Flutter] Google Map API 사용하기 하나하나 자세하게 알려주는 블로그가 없어 내가 직접 포스팅한다. 우선 Google Cloud Platform으로 이동하자! Google Cloud Platform 이동 Google Cloud Platform 하나의 계정으로 모든 Google 서비스를 Google Cloud Pla cording-cossk3.tistory.com 위 포스팅을 따라서 google map api를 사용하게 되면 디버깅 모드에서는 잘 빌드되고, 맵도 잘 나올 것이다. 근데 flutter run --release 위처럼 release로 실행하게되면 회색 화면이 뜨면서 맵이 로드..

[C/Keil RTX] thread 대신 os_tsk_create 사용하기 [내부링크]

커널에 올리는 코드라 그런지 thread를 사용할 수 없다. 대신, thread처럼 사용할 수 있는 os_tsk_create를 사용하자! int main(void) { ... os_sys_init(os_init); ... } os_sys_init 함수는 RTX(Real-Time eXecutive) 커널을 초기화하고 시작할 수 있는 함수이다. 그 안에 인자로 커널이 초기화된 후 시작할 태스크 함수를 넣어주자. __task void os_init(void) { // 1 os_tsk_create(Test1, 3); // 2 os_tsk_create_ex(Test2, 1, (void *)0); os_tsk_delete_self(); } os_tsk_create(테스크 함수, 우선순위); os_tsk_create..

[C/Keil RTX] 포인터 사용하기 (malloc 대체) [내부링크]

keil에서 malloc을 사용하면 계속 hard fault error가 난다.... 삽푸다가 결국 알아낸 방법. rtx 함수를 이용하는 것이다! // 1 #include // 2 typedef struct { PILOT_STATE m_state; PILOT_STATE (*GetState)(void); void (*SetState)(PILOT_STATE pstate); } Pilot; // 3 _declare_box(g_poolPilot, sizeof(Pilot), 1); 1 : RTL.h 함수 선언 2 : 사용하려는 포인터 구조체 선언 3 : _declare_box(pool 변수 이름, 포인터 구조체 사이즈, 포인터 개수) 위와 같이 전역으로 선언을 해줬으면, 초기화를 해주자. // 1 Pilot* g..

[C/Keil RTX] GPIO INPUT 이벤트 처리 (IRQHandler) [내부링크]

나는 PA.6을 EINT0으로 설정하려고 한다. // 1 SYS->GPA_MFPL = SYS_GPA_MFPL_PA6MFP_INT0; // 2 SYS->GPA_MFPL = (SYS->GPA_MFPL & (~SYS_GPA_MFPL_PA6MFP_Msk) ) | SYS_GPA_MFPL_PA6MFP_INT0 ; 1 또는 2 방법으로 설정해주면 된다. 그 다음 아래와 같이 설정해주기. // a GPIO_SetMode(PA, BIT6, GPIO_MODE_INPUT); // b GPIO_EnableInt(PA, 6, GPIO_INT_BOTH_EDGE); // c NVIC_EnableIRQ(EINT0_IRQn); // d GPIO_ENABLE_DEBOUNCE(PA, BIT6); a : PA.6 핀을 input 모드로 설..

[Flutter] CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate [내부링크]

I/flutter: HandshakeException: Handshake error in client (OS Error: CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate(handshake.cc:393)) class MyHttpOverrides extends HttpOverrides { @override HttpClient createHttpClient(SecurityContext? context) { //for https able to get local issuer certificate return super.createHttpClient(context) ..badCertificateCallback = (X509Certificate c..

[정보처리기사] Part02-03-2. 제품 소프트웨어 메뉴얼 작성 [내부링크]

* 제품 소프트웨어 매뉴얼 작성 - 사용자가 제품 구매 후 최초 설치 시 참조하는 매뉴얼 - 제품 소프트웨어 소개, 설치 파일, 설치 절차 등 포함 제품 SW 설치 기본 작성 항목 - 목차 및 개요 : 매뉴얼 전체 내용에 대한 요약 - 문서 이력 정보 : 매뉴얼 변경 이력 정보 - 설치 도구 구성 : exe/dll/ini/chm 등 설치 관련 파일 설명 - 설치 위치 지정 : 설치 폴더와 설치 프로그램 실행 파일 설명 제품 SW 설치 환경 체크 항목 - 사용자 환경 : 사용자 CPU 및 Memory, OS 등 적합 환경 - 응용 프로그램 : 설치 전 다른 응용 프로그램 종료 - 업그레이드 버전 : 업그레이드 이전 버전에 대한 존재 유무 확인 - 백업 폴더 확인 : 데이터 저장 폴더 확인하여 설치 ..

[정보처리기사] Part02-03-1. 제품 소프트웨어 패키징 [내부링크]

* 애플리케이션 패키징 - 개발 완료된 SW를 고객에게 전달하기 위해 패키징, 설치 및 사용 매뉴얼 작성하는 활동 특징 - 개발자가 아닌 사용자 중심 진행 - 신규 및 변경 개발 소스 식별하고 이를 모듈화하여 상용 제품으로 패키징 - 고객 편의 위해 신규/변경 이력 확인하고 이를 버전 관리 및 릴리즈 노트 통해 지속적 관리 - 사용자 실행 환경 이해하고 범용 환경에서 사용 가능토록 일반적인 배포 형태로 분류하여 패키징 진행 사용자 중심 애플리케이션 패키징 * 사용자 실행 환경 이해 - OS, 실행 환경, 시스템 사용, 개발 언어, 고객 사용 방법까지 상세 분석하여 실행 환경 사전 정의 - 다양한 실행 환경 나오면 별도 애플리케이션 패키징 작업 필요 * 고려사항 - 사용자 OS, 시스템 사양(CPU..

[Flutter] nats server 연동 [내부링크]

NATs Server와 연동할 일이 생겼다.. 지식이 없어 이것저것 헤매다가 결국 알아냈더랬지 pubspec.yaml dependencies: flutter: sdk: flutter #NATS dart_nats: 0.3.5 내가 사용한 라이브러리는 dart_nats connect nats.Client natsClient; void connect() async { natsClient = nats.Client(); await natsClient.tcpConnect('ip'); print('${_TAG}connect : ${natsClient.status.name}'); } 처음에 그냥 natsClient.connect 함수를 썼는데 로그는 connected라 찍히는데 정작 서버에서는 연결이 안됐다고 해서 찾..

[Flutter] ListView 와 ListView.builder 차이 [내부링크]

앱 개발을 하다가 bottomsheet를 띄우는데 렉 걸린듯이 버벅이면서 로드가 됐다.. ListView를 사용하고 있기도 하고, 그 안에서 여러 위젯들을 많이 띄우기도 하고.. 연산도 많이 해서 그런가 싶어 이것저것 찾아보다가 결국 알아낸게 ListView.builder 였다. There are four options for constructing a ListView: 1. The default constructor takes an explicit List of children. This constructor is appropriate for list views with a small number of children because constructing the List requires doing wo..

[Flutter] Kakao 소셜로그인 구현 [내부링크]

우선! kakao developers에 애플리케이션 생성 및 flutter 프로젝트에 api 설정하는 과정들은 아래 포스팅에서 보고 따라하면 된다. https://cording-cossk3.tistory.com/209 [Flutter] 카카오내비 앱 연동하기 (1) - Android 개삽펐다..... 대부분의 에러 원인은 키 해시 값이라는걸 명심하자 ㅜㅜ pubspec.yaml dependencies: flutter: sdk: flutter # kakao api kakao_flutter_sdk: ^1.0.0 # 전체 추가 kakao_flutter_sdk_user: ^1.0.0.. cording-cossk3.tistory.com 아래 사이트에 접속 후 로그인하면..

[Flutter] naver_map_plugin 사용하여 특정 위치로 이동하기 [내부링크]

ㅜㅜㅜㅜ 진짜 너무 헤맸다. 정보가 너무 없어서 내가 기능 추가해서 라이브러리를 만들어야 하나.. 하면서 git 프로젝트를 다운받아 코드를 천천히 살펴보다가 발견했다........ final controller = await _controller.future; controller.moveCamera( CameraUpdate.toCameraPosition(CameraPosition(target: _latLng)) ); toScroll() 함수를 쓰려고 했으나, animate 관련해서는 널 값을 참조하고 있다고 해서 toCameraPosition 함수를 썼다. 야호

[Flutter] Search 검색 기능 (SearchDelegate) [내부링크]

https://dev.to/luizeduardotj/search-bar-in-flutter-33e1 Search Bar in flutter Link for the code Hey devs, today I'll show how to implement a search bar in flutter. This beautiful... dev.to 위 포스팅을 참고했다. 우선, 호출 방법부터 알아보자. 버튼을 누르면 검색을 할 수 있게끔 하자. 우선 내 코드를 가져와봤다. final List list = List.generate(10, (index) => "Text $index"); GestureDetector( onTap: () { showSearch(context: context, delegate: Search(..

[Flutter] Tmap API 및 Tmap 앱 연동 (2) - iOS편 [내부링크]

후... 반나절을 삽펐다. tmap에서 ios sdk를 다운받고 압축 해제를 하면 아래와 같이 내용물이 들어있다. 혹시 sdk를 어떻게 다운받는지 모른다면 여기를 클릭해서 보면 된다. 실제 디바이스 기기에 앱을 올릴거면 배포 폴더 시뮬레이터에 앱을 올릴거면 개발 폴더를 들어가자. ※ 혹시 앱을 배포할 예정이면 배포 폴더의 sdk를 사용해야 한다. 자, 그리고 flutter 프로젝트\ios\Runner.xcworkspace를 열고, 프로젝트 > General 창을 띄우자 그리고 해당 폴더 안에 있는 SDK 폴더를 General > Frameworks, Libraries, and Embedded Content 안으로 드래그 드롭 해준다. 근데 난.. import TMapSDK 를 하려고 하면 자꾸 No..

[Flutter] 카카오내비 앱 연동하기 (2) - iOS [내부링크]

대부분의 자세한 내용들은 아래 포스팅에 다 들어있다. https://cording-cossk3.tistory.com/209 [Flutter] 카카오내비 앱 연동하기 (1) - Android 개삽펐다..... 대부분의 에러 원인은 키 해시 값이라는걸 명심하자 ㅜㅜ pubspec.yaml dependencies: flutter: sdk: flutter # kakao api kakao_flutter_sdk: ^1.0.0 # 전체 추가 kakao_flutter_sdk_user: ^1.0.0.. cording-cossk3.tistory.com iOS에서 실행을 시키면 자꾸 카카오내비 앱이 설치되어 있지 않다고 떴다. canOpenURL: failed for URL ~~~ 해결 방법 Info.plist LSAppl..

[Flutter] Tmap API 및 Tmap 앱 연동 (1) - Android편 [내부링크]

https://openapi.sk.com/ SK open API Recopick 레코픽은 성능과 안정성이 검증된 실시간 개인화 추천엔진과 SK그룹사 데이터를 기반으로 다양한 개인화 서비스를 제공합니다. SK planet openapi.sk.com 위 사이트 접속 아래와 같은 화면이 나오면 상단 메뉴 중 [My Project] 클릭 My Project 화면에서 빨간 버튼 [프로젝트 생성] 클릭 아래와 같은 창이 뜨면 프로젝트명과 설명 입력 후 [확인] 클릭 그럼 아래와 같이 내가 생성한 프로젝트가 추가된 것을 확인 가능함. 그럼 이제 상단 메뉴 중 [API] 클릭 나는 TMAP API를 사용할 것이니 [TMAP] 클릭 우측에 사용할 API 선택 후 [바로구매] 클릭 TMAP API는 무료. 구매를 했다면 ..

[Flutter] 카카오내비 앱 연동하기 (1) - Android [내부링크]

개삽펐다..... 대부분의 에러 원인은 키 해시 값이라는걸 명심하자 ㅜㅜ pubspec.yaml dependencies: flutter: sdk: flutter # kakao api kakao_flutter_sdk: ^1.0.0 # 전체 추가 kakao_flutter_sdk_user: ^1.0.0 # 카카오 로그인 kakao_flutter_sdk_talk: ^1.0.0 # 카카오톡(소셜, 메시지) kakao_flutter_sdk_story: ^1.0.0 # 카카오스토리 kakao_flutter_sdk_link: ^1.0.0 # 카카오링크 kakao_flutter_sdk_navi: ^1.0.0 # 카카오내비 # kakao 의존성 library dio: ^4.0.4 json_serializable: ^4.1..

[Flutter] Kakao Map api 사용하기 [내부링크]

카카오 developer 사이트 바로가기 [ + 애플리케이션 추가하기] 클릭 앱 이름, 사업자명 입력 후 저장 그럼 다음과 같이 리스트에 애플리케이션이 추가된 것을 확인 가능. 생성된 애플리케이션 클릭 여기서 네이티브앱 키 메모해두고, [플랫폼 설정하기] 클릭 [Android 플랫폼 등록] 쿨락 패키지명과 키 해시 입력 후 저장 아래와 같이 Android 플랫폼이 등록된 것을 확인 가능 해시 키 값은 아래를 참고하면 된다. https://developers.kakao.com/docs/latest/ko/getting-started/sdk-android-v1 Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 AP..

[Flutter] Navigator.pop 데이터 전달하기 [내부링크]

생각보다 간단하다! 우선 A 페이지에서의 버튼을 구현해보자 //A bool _state = false; ElevatedButton( onPressed: () async { bool state = await Navigator.push(context, MaterialPageRoute(builder: (context) => B())); setState(() { _state = state; }); }, ... ) 여기서 중요한건 async와 await 이다! B 페이지에서는 다음과 같이 구현하면 된다. ElevatedButton( onPressed: () { ... Navigator.pop(context, true); }, ... )

[Flutter] endDraw + AppBar actions 함께 쓰기 [내부링크]

endDraw를 쓰고 appbar actions에서 action들을 추가하면 endDraw가 안보이게 된다. 그래서 찾아낸 방법은 Scaffold를 커스터마이징 하는 것! class CustomScaffold extends Scaffold { static GlobalKey _keyScaffold = GlobalKey(); CustomScaffold({ AppBar appBar, Widget body, Widget floatingActionButton, FloatingActionButtonLocation floatingActionButtonLocation, FloatingActionButtonAnimator floatingActionButtonAnimator, List persistentFooterButt..

[Flutter] AppBar Module [내부링크]

appbar에 action 들을 추가하니 코드가 가독성이 떨어져 보여 모듈화해서 빌드해보았다. import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class AppBarArea extends StatelessWidget implements PreferredSizeWidget { final AppBar appBar; const AppBarArea({Key key, this.appBar}) : super(key: key); @override Widget build(BuildContext context) { return AppBar( backgroundColor: Colors.white, leading: Image.a..

[Flutter] Splash 화면 [내부링크]

pubspec.yaml dependencies: flutter_native_splash: ^1.1.8+4 projet_name\flutter_native_splash.yaml 생성 flutter_native_splash: image: assets/images/logo.png fullscreen: true 패키지 실행 (cmd 창) flutter pub run flutter_native_splash:create splash.dart class Splash extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Image.asset( "assets/images/log..

[Flutter] 네이버 Maps API 사용하기 [내부링크]

네이버 지도 api 사이트 바로가기 위 링크를 통해 이동하면 아래와 같은 화면이 뜬다 여기서 중간에 보이는 [이용 신청하기] 버튼 클릭 그럼 다음과 같이 API 관련 페이지가 뜰 것이다. 물론, 로그인을 했다는 전제 하에. 스크롤을 내리다보면 맨 하단에 [ + Application 등록 ] 이라는 버튼이 보일 것이다. 클릭 약관 동의 약관 동의 후 Service 선택이 보일 것이다. 우선 뭐가 뭔지 모르니 Maps 를 체크해준다. 이런.. Web Dynamic Map과 Static Map 서비스 선택 시 Web URL을 입력해야 한다고 한다.. 나는 모바일 서비스를 이용할 예정이라 Web 관련 서비스들은 다시 체크 해제를 해준다. Android 앱 패키지 이름과 iOS 번들 ID 입력을 위해 플러터 프로..

[이펙티브 자바] 규칙2 [내부링크]

규칙 2 : 생성자 인자가 많을 시 Builder 패턴 적용을 고려하라 public class NutritionFacts { private final int servingSize; // (mL) 필수 private final int servings; // (per container) 필수 private final int calories; // 선택 private final int fat; // (g) 선택 private final int sodium; // (mg) 선택 private final int carbohydrate; // (g) 선택 public NutritionFacts(int servingSize, int servings) { this(servingSize, servings, 0); } p..

[이펙티브 자바] 규칙1 [내부링크]

규칙 1 : 생성자 사용 전 정적 팩터리 메서드 사용을 고려해라 //서비스 제공자 인터페이스 대략적 모습 //서비스 인터페이스 public interface Service { ... //서비스에 고유한 메서드들이 이 자리에 온다 } //서비스 제공자 인터페이스 public interface Provider { Service newService(); } //서비스 등록과 접근에 사용되는 객체 생성 불가능 클래스 public class Services { private Services() { } //객체 생성 방지 private static final Map providers = new ConcurrentHashMap(); public static final String DEFAULT_PROVIDER_NAM..

[Flutter] Google Map API 사용하기 [내부링크]

하나하나 자세하게 알려주는 블로그가 없어 내가 직접 포스팅한다. 우선 Google Cloud Platform으로 이동하자! Google Cloud Platform 이동 Google Cloud Platform 하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요. accounts.google.com 그럼, 다음과 같이 상단에 Google Cloud Platform 옆 프로젝트 선택 스피너가 보일 것이다. 클릭하면 다음과 같이 프로젝트 선택 창이 뜬다 우측 상단 [새 프로젝트] 클릭 그럼 다음과 같이 프로젝트 이름 입력 란이 뜰 것이다. 아무렇게나 입력해도 상관 없는 듯 하다 입력 후 [만들기] 클릭 그럼 상단에 방금 만든 프로젝트 이름이 뜬 것을 확인할..

[정보처리기사] Part02-05-3. 인터페이스 구현 검증 [내부링크]

* 설계 산출물 1. 인터페이스 구현 검증 도구 - 인터페이스 구현 검증 위해서는 인터페이스 단위 기능 및 시나리오에 기반한 통합 테스트 필요 - 테스트 자동화 도구 이용해 단위 및 통합 테스트 효율성 높일 수 있음 인터페이스 구현 검증 도구 ▷ xUit - Java(Junit), C++(Cppunit) 등 다양한 언어 지원하는 단위 테스트 프레임워크 ▷ STAF - 서비스 호출, 컴포넌트 재사용 등 다양한 환경 지원하는 테스트 프레임워크 ▷ FitNesse - 웹 기반 테스트 케이스 설계/실행/결과 확인 등 지원하는 테스트 프레임워크 ▷ NTAF - Naver 테스트 자동화 프레임워크. STAF + FitNesse ▷ Selenium - 다양한 브라우저 지원 및 개발 언어 지원하는 웹 애플리케이션 ..

[정보처리기사] Part02-02-2. 통합구현 관리 [내부링크]

* IDE(통합 개발 환경; Integrated Development Environment) 도구 코딩, 디버그, 컴파일, 배포 등 프로그램 개발에 관련된 모든 작업을 하나의 프로그램 안에서 처리하는 환경 제공하는 소프트웨어 IDE 도구 기능 ▷ 개발 환경 지원 - C++, Java 등 언어 이용하여 애플리케이션 개발할 수 있는 환경 제공해 줌 ▷ 컴파일 및 디버깅 기능 제공 - 코딩 완료되면 컴파일하여 문법에 어긋나지 않는지 확인하고, 오류 발생 시 이를 추적하여 수정할 수 있는 디버깅 기능 제공 ▷ 외부 연계 모듈과 통합 기능 제공 - EAI 등 외부 인터페이스 모듈과 통합 통해 통합 개발 기능 제공 - JDBC 등 통해 DB 연동 통한 통합 개발 기능 제공 - 외부 형상, 배포 관리 기능과 ..

[정보처리기사] Part02-02-1. 모듈 구현 [내부링크]

* 단위 모듈 구현 SW 개발에 있어 기능 분할하고 추상화하여 성능 향상시키고 유지보수 효과적으로 하기 위한 단위 컴포넌트 별 구현 기법 인터페이스 모듈, DB 접근 모듈 등 통합 구현에 필요한 단위에 컴포넌트 구현 1. 단위 모듈 종류 - 상세 설계된 단위 모듈, 환경 변수를 실제 프로그래밍 언어로 구현하는 것 - 화면 모듈, 화면에서 입력받은 데이터 처리 위한 서비스 컴포넌트, 비즈니스 트랜잭션 컴포넌트 2. 단위 모듈 구현 원리 단위 모듈 구현 원리 ▷ 정보 은닉 (Information Hiding) - 객체에 대한 구체적인 정보 노출시키지 않도록 하는 기법 ▷ 분할과 정복 (Divide & Conquer) - 복잡한 문제 분해하여 모듈 단위로 문제 해결 ▷ 데이터 추상화 (Data Ab..

[정보처리기사] Part02-01-4. 데이터 조작 프로시저 최적화 [내부링크]

* 쿼리 성능 측정 DB에서 프로시저에 있는 SQL 실행 계획 분석하여 시간 오래 걸리는 부분 수정하여 최소 시간으로 원하는 결과 얻도록 프로시저 수정하는 활동 RDB, 특히 Oracle 쿼리 성능 측정 방법에는 TKPROF 명령어, EXPLAIN PLAN 이 있음 1. SQL 처리 흐름 SQL 처리 단계 ▷ 구문 분석 (Parsing) - 사용자가 요청한 SQL 문이 실행 계획 있는지 확인 - 실행 계획 있음 : 과거에 사용된 문장이기에 구문 분석할 필요 없이 바로 실행 - 실행 계획 없음 : 옵티마이저는 인덱스 등 분석해 가장 빠르게 검색해 줄 수 있는 실행 계획 찾음 ▷ 실행 (Execution) - 실행 계획 따라 메모리 영역의 DB 버퍼 캐시 영역에 해당 데이터가 있는지 확인 - 버퍼..

[정보처리기사] Part01-04-3. 인터페이스 상세 설계 [내부링크]

* 내외부 송/수신 인터페이스 시스템 직접 인터페이스 방식 간접 인터페이스 방식 1. 직접 연계 방식 - 일반적으로 중간 연계 매개체가 생략돼 연계 처리 속도 빠르고 구현 단순하며, 개발 비용과 기간 짧음 - 송수신 시스템 사이 결합도 높아 시스템 변경에 민감한 특성 있음 - 보안 위한 암/복호화 처리와 업무 기능 구현을 인터페이스 별로 작성하여 전사 차원 시스템 인터페이스 통합 환경 구축이 어려운 단점 2. 간접 연계 방식 - 연계 서버 활용하여 송/수신 처리와 송/수신 현황 모니터링하고 통제하는 방식 - 서로 상이한 네트워크과 프로토콜 등 다양한 환경 시스템들 연계하고 통합 관리 가능 - 장점 : 인터페이스 변경 시에도 유연하게 대처 가능하고 보안이나 업무 처리 로직 반영 용이 - 단점 : 인터페이스..

[정보처리기사] Part01-04-2. 인터페이스 대상 식별 [내부링크]

* 시스템 아키텍처 시스템이 어떻게 작동하는지를 설명하는 프레임워크 시스템 목적 달성 위해 시스템의 각 컴포너트가 무엇이며 어떻게 상호 작용 하는지, 정보가 어떻게 교환되는지를 설명 시스템 아키텍처 기본 요구사항 - 시스템 구성 및 동작 원리 표현 - 시스템 구성 요소에 대해 설계 및 구현 지원하는 수준으로 자세히 기술됨 - 구성 요소 간 관계 및 시스템 외부 환경과의 관계 묘사 - 요구 사양 및 시스템 전체 수명 주기 고려 - HW와 SW 포함하는 시스템 전체에 대한 논리적 기능 체계와 그것을 실현하기 위한 구성 방식, 시스템 전체적인 최적화를 목표로 함 1. 시스템 아키텍처 설계 - SW 시스템 아키텍처 설계에 제약을 주는 상위 설계로서의 시스템 아키텍처 설계가 존재하고, SW 아키텍처 제..

[정보처리기사] Part01-04-1. 인터페이스 요구사항 확인 [내부링크]

* 클래스 설계 분석 단계에서 아직 결정되지 않는 클래스 내부 부분 중 구현에 필요한 서비스 인터페이스와 메서드 내부 로직 결정하는 작업 클래스 서비스 인터페이스 설계 시 사용자와 구현하는 사람 간 상호 약속 정의한 "협약에 의한 설계" 라는 개념 적용 각 객체 상태가 연산(메서드) 호출에 따라 상태 값이 어떻게 변화하는지 살펴보고 상세히 설계해야 함 클래스 인터페이스 - 클래스 설계 시 서브 시스템에서 제공하는 서비스는 연산, 파라미터, 타입, 클래스 인터페이스로 정의됨 - 서브 시스템에서 제공하는 서비스 내용은 API 라고 함 - 클래스에서 제공하는 속성 값 범위, 리턴 값 범위 등을 개발자, 사용자, 운영자 등이 공유 가능토록 정의 협약에 의한 설계 (Design by Contra..

[정보처리기사] Part01-03-2. 객체 지향 설계 [내부링크]

* 객체 지향 (Object Orient) 실세계 개체를 속성과 메소드가 결합된 형태의 객체로 표현하는 개념 구현 대상을 하나의 객체로 보고 객체와 객체들 간 관계로 모델링 하는 방법 개발 측면에서 SW 위기 해결 위한 대안과 생산성 저하에 따른 재사용성, 확장성 필요에 의해 등장 사용 측면에서 컴퓨팅 환경에 대한 보다 많은 기능, 단순성, 사용 편의성 요구가 증대 객체 지향 프로그래밍 (Object Oriented Programming) - 컴퓨터 프로그래밍 패러다임 중 하나 - 컴퓨터 프로그램을 명령어 목록으로 보는 시각에서 벗어나 여러 개 독립된 단위(객체)들의 모임으로 파악하고자 함 - 각각의 객체는 메시지 주고 받고, 데이터 처리 가능 - 프로그램을 유연하고 변경 용이하게 만들..

[정보처리기사] Part01-03-1. 공통 모듈 설계 [내부링크]

* 공통 모듈 날짜 처리 위한 유틸리티 모듈 등과 같이 전체 프로그램 기능 중 공통적으로 사용 가능한 모듈 의미 모듈화 - SW 성능 향상시키거나 시스템 수정 및 재사용, 유지 관리 용이케 하여 프로그램 효율적으로 관리 가능토록 시스템 분해하고 추상화하는 기법 의미 - 모듈 크기가 과도하게 작은 경우 모듈 개수가 많아져 모듈 간 통합 비용 과다 발생 - 모듈 크기가 과도하게 큰 경우 모듈 간 통합 비용 상대적으로 감소하는 대신 하나의 모듈 개발하는 데 소용되는 비용 커짐 1. 응집도 - 모듈 내부 구성 요소 간 관계 밀접 정도 - 응집도 높을수록 필요한 요소들로 구성되어 짐 - 응집도 낮을수록 요소들 간 관련성 적은 요소들로 구성되어 짐 - 품질 측면에서 가장 높은 품질은 기능적 응집도이며, 가장..

[정보처리기사] Part01-02-2. UI 설계 [내부링크]

* UI 흐름 및 상세 설계 1. UI 설계 단계 ① 문제 정의 - 시스템 목적 기술하고 해결해야 할 문제 정의 ② 사용자 모델 정의 - 사용자 특성 명확히 하지 않고는 시스템 사용성 확보 불가하므로 사용자 특성 결정 - 사용자 컴퓨터 SW와 작업에 대한 지식 정도에 따라 초보자, 중급자, 숙련자로 분류 가능 ③ 작업 분석 - 항상 해결해야 할 문제 정제하고 사용자 특징들 세부화하고 시스템 통해 수행되어야 할 작업들 정의 ④ 컴퓨터 오브젝트 및 기능 정의 - 분석 작업을 컴퓨터의 어떤 사용자 인터페이스 통해 표혀할 것인지를 정의 - 실제로 사용자는 시스템 이용해 작업할 경우, 컴퓨터 오브젝트 통해 수행 ⑤ 사용자 인터페이스 정의 - 컴퓨터나 작업 수행 방법에 대해 상호작용하는 오브젝트 선택하고 시스템 상..

[정보처리기사] Part01-02-1. UI 요구사항 확인 [내부링크]

* UI 사람과 사물 또는 시스템 사이에서 의사소통 할 수 있도록 일시적 또는 영구적인 접근 목적으로 만들어진 물리적, 가상적 매개체 UI 종류 ▷ 그래픽 사용자 인터페이스 (GUI) - 그래픽과 텍스트로 이루어져 있으며 객체지향 인터페이스와 응용 프로그램지향 인터페이스 공존 ▷ 웹 기반 인터페이스 (웹 사용자 인터페이스, WUI) - 인터넷과 웹 브라우저 통해 웹 페이지 열람하고 조작하는 인터페이스 ▷ 명령 줄 인터페이스 (CLI) - 사용자가 컴퓨터 자판 등을 이용해 명령 문자열 입력하여 체계 조작하는 인터페이스 ▷ 텍스트 사용자 인터페이스 (TUI) - 문자열 기반 사용자 인터페이스와 구분 위해 그래픽 사용자 인터페이스 발명된 뒤에 만들어진 용어 ▷ 터치 사용자 인터페이스 UI 세 분야 ..

[정보처리기사] Part01-01-3. 분석모델 확인 (2) [내부링크]

* 분석 자동화 도구 1. 유즈케이스 모델 검증 유즈케이스 모델 검증 ▷ 액터 - 기능 구현에 관계되는 액터가 모두 도출되었는가? - 액터 목록에서 액터 명이 역할 중심으로 명명되었는가? - 요구사항 정의서, 요구사항 기술서에 외부/내부 액터가 모두 도출되었는가? - 액터 목록과 액터 명세서에 기록된 액터가 타당한지 확인함 ▷ 유즈케이스 - 요구기능 구현에 필요한 유즈케이스가 모두 도출 되었는가? - 도출된 유즈케이스를 논리적으로 연결하여 누락된 기능 파악 - 도출된 유즈케이스가 유즈케이스 목록과 유즈케이스 명세서에 반영 되었는가? - 도출된 유즈케이스 논리적인 합이 과업 범위와 일치하는지 비교 - 도출된 유즈케이스들이 논리적으로 그룹화 되었는지 확인 - 유즈케이스 기능 범위가 다른 유즈케이스 기능 ..

[정보처리기사] Part01-01-3. 분석모델 확인 (1) [내부링크]

* 모델링 실세계 물리현상을 특정 목적에 맞춰 이용하기 쉬운 형식으로 표현하는 일 의미 개념 모델링 (Conceptual Modeling) - 실세계 문제에 대한 모델링이 SW 요구사항 분석 핵심 - 문제 도메인의 엔티티들과 그들의 관계 및 종속성 반영 UML (Unified Modeling Language) - 객체 지향 SW 개발 과정에서 산출물을 명세화, 시각화, 문서화 할 때 사용되는 모델링 기술과 방법론 통합해 만든 표준화된 범용 모델링 언어 UML 특징 가시화 언어 - 개념 모델 작성 시 오류 적고 의사소통 용이케 함 구축 언어 - 다양한 객체지향 프로그램 언어로 변환 가능 (순공학, 역공학) 문서화 언어 - 시스템에 대한 평가, 통제, 의소소통 문서 명세화 언어 ..

[정보처리기사] Part01-01-2. 요구사항 확인 (2) [내부링크]

* 소프트웨어 개발 방법론 1. 애자일 (Agile) - 전체 개발 단계에서 변화에 대한 신속한 대응으로 요구사항 지속적으로 분석, 반영하여 배포 시간차 최소화 - SW 개발 방법에 있어 아무런 계획 없는 개발 방법과 계획이 지나치게 많은 개발 방법들 사이에서 타협점 찾고자 함 애자일 선언문 (Agile Manifesto) - 공정과 도구보다 개인과 상호작용 - 포괄적인 문서보다 작동하는 소프트웨어 - 계햑 협상보다 고객과의 협력 - 계획을 따르기보다 변화에 대응하기 애자일 방법론 종류 ▷ XP (eXtreme Programming) - 의사소통 개선과 즉각적인 피드백에 의한 단순한 코딩으로 SW 품질 높이기 위한 방법론 - 1~3주 반복 (iteration) - 5가지 가치 : 용기, 단순성, ..

[정보처리기사] Part01-01-2. 요구사항 확인 (1) [내부링크]

* 요구 공학 (Requirements Engineering) 시스템 요구사항 문서 생성, 검증, 관리하기 위해 수행되는 구조화된 활동 집합 이해관계자 사이에 효과적인 의사소통 수단 제공하고 요구사항에 대한 공통 이해 설정 요구사항 손실 방지 및 에러 감지로 불필요한 비용 절감하고 요구사항 변경 추적 가능케 함 개발 절차 ▷ 타당성 조사 - 시스템 구축 가능성 평가 : 비용, 일정, 기술, 법률 제약 사항 - 활용 기법 = 질문지(AS-IS 문제점, 통합 시 문제점), SWOT 분석 ▷ 도출 (Elicitation) - SW가 해결해야 할 문제 이해하고 요구사항이 어디에 있고, 어떻게 수집할 것인가와 관련되어 있음 - 활용 기법 = 인터뷰, 포커스 그룹, 집단 창의력 기법, 설문조사, 관찰..

[정보처리기사] Part01-01-1. 현행 시스템 분석 [내부링크]

* 현행 시스템 파악 단계 및 각 활동별 주요 특징 ▷ 구성/기능/인터페이스 파악 - 시스템 구성 현황 파악 - 시스템 기능 파악 - 시스템 인터페이스 현황 파악 ▷ 아키텍처 및 소프트웨어 구성 파악 - 아키텍처 파악 - 소프트웨어 구성 파악 ▷ 하드웨어 및 네트워크 구성 파악 - 시스템 하드웨어 현황 파악 - 네트워크 구성 파악 목표시스템 정의 절차 및 산출물 ▷ 1단계 : 현행 시스템 분석 1. 현행 시스템 구성/기능/인터페이스 현황 파악 단계 - 산출물 : 현행 시스템 분석서, 현행 시스템 기능 정의서, 현행 인터페이스 현황 정의서 2. 현행 시스템 아키텍처 및 소프트웨어 구성 현황 파악 단계 - 산출물 : 현행 시스템 아키텍처 구성도, 현행 소프트웨어 구성도 3. 현행 시스템 하드웨어 및 ..

[정보처리기사] Part05-01-1. 소프트웨어 개발방법론 선정 (1) [내부링크]

소프트웨어 개발 생명주기 (Software Development Life Cycle) 소프트웨어를 어떻게 개발할 것인가에 대한 추상적 표현 순차적 또는 병렬적 단계로 구성되며 개발 모델 또는 소프트웨어 공학 패러다임으로 정의 타당성 검토 > 분석 > 설계 > 개발 > 테스트 > 운영 > 유지보수 > 폐기 특징 ▷ 효율적 자원 사용 → 전체 프로젝트 비용 산정과 개발 계획 수립 가능한 기본 골격 제시 → 개발 생명주기 각 단계에 관련된 활동들 정의 ▷ 산출물 표준화 → 용어, 산출물 등 일관성 있도록 산출물 표준화 → 참여자들 간 의사소통 기준과 용어 표준화 가능케 함 → 단계별 활동들 통해 다음 단계에 활용될 수 있는 산출물 작성됨 ▷ 프로젝트 관리 → 원활한 프로젝트 수행 위한 프로젝트 ..

[정보처리기사] Part04-02-3. 라이브러리 활용 [내부링크]

라이브러리 모듈화 되어 제공되는 프로그램 효율적인 프로그램 개발 위해 필요한 프로그램 모아놓은 집합체 구성 ▷ 도움말 → 라이브러리 사용할 수 있도록 하는 도움말 문서 ▷ 설치 파일 → 라이브러리 적용 위해 제공되는 설치 파일 ▷ 샘플 코드 → 라이브러리 이해하고 손쉽게 적용 위해 제공되는 샘플 소스코드 1. 표준 라이브러리와 외부 라이브러리 ▷ 표준 라이브러리 → 프로그래밍 언어가 기본적으로 가지고 있는 라이브러리 의미 → 여러 종류의 모듈과 패키지 가지며, 별도의 파일 설치 없이 다양한 기능 이용 가능 ▷ 외부 라이브러리 → 표준 라이브러리와 달리 별도 파일 설치해야 함 → 누구나 개발하여 설치 가능하며, 인터넷 등을 이용하여 공유 가능 2. 모듈과 패키지 ▷ 모듈 → 한 개의 파일에서 기..

[정보처리기사] Part04-02-2. 언어특성 활용 [내부링크]

* 프로그램 개발 언어 1. 프로그램 실행 방식에 따른 분류 개발 언어 ▷ 컴파일러 언어 → 번역사 같은 작업 → 프로그램 전체 라인을 처음부터 끝까지 해독해 목적 코드로 만든 후 실행 → C, C++, COBOL, Ada, FORTRAN, PASCAL 등 ▷ 인터프리터 언어 → 통역사와 같은 작업 → 프로그램 라인 단위로 한 줄씩 해석하고 바로 실행 → 자바스크립트, BASIC, LISP 등 ▷ 스크립트 언어 → 소스 코드 컴파일 하지 않고도 실행 가능한 프로그래밍 언어 → 별도 컴파일 없이 내장된 번역기에 의해 번역되므로 바로 실행 가능 → 컴파일러 언어와는 다르게 인터프리터 사용해 코드 한줄 한 줄을 즉시 해석 및 실행 → JavaScript, ActionScript, AutoHotKey, JS..

[Flutter] Text, Icon, Image [내부링크]

Text import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( home: Row( children: [ Text( 'Hey!', style: TextStyle( fontSize: 100, fontFamily: 'Futura', color: Colors.blue, ), ), Text( 'Hey!', style: TextStyle( fontSize: 30, fon..

[Flutter] SizedBox, Spacer [내부링크]

SizedBox 자식의 크기를 지정할 수 있다 import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( home: Row( children: [ BlueBox(), SizedBox( width: 200, height: 150, child: BlueBox(), ), BlueBox() ], ), ); } } class BlueBox extends StatelessWi..

[Flutter] Flexible, Expanded [내부링크]

Flexible import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( home: Row( children: [ BlueBox(), Flexible( fit: FlexFit.loose, flex: 1, child: BlueBox(), ) ], ), ); } } class BlueBox extends StatelessWidget { @override Widget ..

[Flutter] Row, Column [내부링크]

오랜만에 다시 flutter를 하게 됐다... 생각이 하나도 안나서 기초부터 다시 학습하려 한다 ㅜ https://flutter-ko.dev/docs/codelabs/layout-basics Basic Flutter layout concepts A codelab that teaches basic Flutter layout concepts through DartPad examples and exercises. flutter-ko.dev Row 예제를 실행해보자 import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { // This widget is the root o..

[정보처리기사] Part04-02-1. 기본 문법 활용 [내부링크]

데이터 타입 응용 소프트웨어 개발에 사용되는 기본 문법 중 하나 개발 시 사용될 언어에 대한 선택과 해당 언어 데이터 타입 숙지하여 활용해야 함 1. 변수와 데이터 타입 확인 절차 ㄱ. 변수와 데이터 타입 의미 파악 유형 ▷ 블린 타입 → 조건이 참인지 거짓인지 판단 → bool ▷ 문자 타입 → 문자 하나를 저장 → char ▷ 문자열 타입 → 나열된 여러 개 문자 저장 → string ▷ 정수 타입 → 정수 값 저장 → int, long, unsigned int ▷ 부동소수점 타입 → 소수점 포함하는 실수 값 저장 → float, double 자료형별 형식 지정자 ▷ int a; → int로 선언된 변수는 %d로 출력 → %d ▷ long a; → long로 선언된 변수는 %ld로 출력..

[정보처리기사] Part04-01-4. 배치 프로그램 구현 [내부링크]

배치 프로그램 사용자와의 상호작용 없이 일련 작업들을 작업 단위로 묶어 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄로 처리하는 프로그램 필수 요소 ▷ 대용량 데이터 → 대용량 데이터 처리 가능해야 함 ▷ 자동화 → 심각한 오류 상황 외에는 사용자 개입 없이 동작해야 함 ▷ 견고함 → 유효하지 않은 데이터나 로직 수행 경우에도 예외 처리해서 비정상적인 동작 중단 발생하지 않아야 함 ▷ 안정성 → 어떤 문제가 생겼는지, 언제 발생했는지 등 추적 가능해야 함 ▷ 성능 → 주어진 시간 내 처리 완료 가능해야 하고, 동시 동작하고 있는 다른 애플리케이션 방해하지 않아야 함 배치 스케줄러 일괄 처리 위해 주기적으로 발생하거나 반복적으로 발생하는 작업을 지원하는 도구 종류 ㄱ. 스프링 배치(Spri..

[정보처리기사] Part04-01-3. 서버 프로그램 구현 [내부링크]

보안 취약점 취약점 (vulnerability) : 공격자가 시스템 정보에 대한 안정성 낮추는데 사용되는 보안 약점 시스템 자체 결함, 공격자 결함에 대한 접근 용이성, 공격자가 결함에 대하여 공격할 가능성 취약점 공격 위해, 공격자는 시스템 약점 이용하여 접속 가능한 적어도 하나 이상의 툴이나 기법 이용 취약점 식별과 제거 → 컴퓨터 시스템에서 취약점들을 발견 가능케 도와주는 많은 솔루션 존재 → 그러나 이러한 솔루션은 보안 담당자에게 현재 존재하는 취약점들에 대한 편의 제공할 수 있지만, 사람의 판단을 완전히 대체 불가 > 스캐너나 툴에만 의존하는 것은 현재 시스템에 존재하는 문제들에 대한 매우 제한된 관점과 오류 생성 가능 → 보안 취약점 이용한 공격 확률 줄일 수 있는 가장 좋은 방..

[정보처리기사] Part04-01-2. 공통 모듈 구현 [내부링크]

재사용 기존 SW 또는 SW 지식 재활용하여, 새로운 SW 개발하는 활동 이해 → SW나 SW 지식은 재사용 가능한 자산 → 재사용 대상에는 설계, 요구명세, 검사, 아키텍처 등 포함 → 라이브러리는 SW 재사용 좋은 사례 → 프로그래머는 프로그램 일부 재사용하기 위해서 공통 라이브러리 생성 → SW 재사용하기 쉽게 하는 주요 특성 : 모듈화, 낮은 결합도, 높은 응집도, 캡슐화, 관심사 분리 등 코드 재사용 → 가장 일반적인 재사용 가능한 자산 중 하나는 프로그램 코드 → 특정 시점에 작성된 프로그램 일부 또는 전부를 다른 프로그램 만들 때 재활용하는 활동 → 장황한 코딩 작업에 소비하는 시간과 에너지 절약하는 전형적인 기법 재사용 프로그래밍 기법 ▷ 객체 지향 프로그래밍 → 객체 단위로..

[정보처리기사] Part04-01-1. 개발환경 구축 [내부링크]

개발 환경 구축 애플리케이션 설계 기반으로 개발에 필요한 환경 구성하고, 프로그래밍 언어와 도구 활용하여 공통모듈, 업무, 프로그램과 배치 프로그램 구현하는 능력 개발 도구 분류 및 특성 ▷ 구현 도구 (Implementation Tool) : 코드의 작성과 디버깅, 수정 작업 가능하며 구현해야 할 SW가 어떤 프로그래밍 언어로 개발되는지에 따라 적합한 구현 도구 선택하여 사용 (Eclipse, Visual Studio Code, IntelliJ, NetBeans 등) ▷ 테스트 도구 (Test Tool) : 코드 기능 검증과 개발 품질 높이기 위해 사용하는 도구이며, 테스트 계획, 수행, 분석 등의 작업 가능 (xUnit, Spring Test 등) ▷ 형상관리 도구 (Configuration ..

[정보처리기사] 2022 정보처리기사 필기 목차 및 요약 [내부링크]

1과목. 소프트웨어 설계 chapter 01. 요구사항 확인 1. 현행 시스템 분석 2. 요구사항 확인 3. 분석모델 확인 chapter 02. 화면 설계 1. UI 요구사항 확인 2. UI 설계 chapter 03. 애플리케이션 설계 1. 공통 모듈 설계 2. 객체지향 설계 chapter 04. 인터페이스 설계 1. 인터페이스 요구사항 확인 2. 인터페이스 대상 식별 3. 인터페이스 상세 설계 2과목. 소프트웨어 개발 chapter 01. 데이터 입출력 구현 1. 논리 데이터 저장소 확인 2. 물리 데이터 저장소 설계 3. 데이터 조작 프로시저 작성 4. 데이터 조작 프로시저 최적화 chapter 02. 통합 구현 1. 모듈 구현 2. 통합구현 관리 chapter 03. 제..

[정보처리기사] 2022 정보처리기사 시험일정/응시자격 [내부링크]

원서접수기간은 원서접수 첫날 10:00부터 마지막 날 18:00까지 임. 필기시험 합격예정자 및 최종합격자 발표시간은 해당 발표일 09:00임. 주말 및 공휴일, 공단창립기념일(3.18)에는 실기시험 원서 접수가 불가.

mac android studio 삭제 [내부링크]

터미널에서 아래와 같이 명령어 실행 rm -Rf /Applications/Android\ Studio.app android studio 관련 환경 변수가 있다면 아래와 같이 명령어 실행 rm -Rf ~/Library/Preferences/AndroidStudio* plist 파일 삭제 rm -Rf ~/Library/Preferences/com.google.android.studio.plist rm -Rf ~/Library/Preferences/com.android.Emulator.plist gradle 관련 파일 삭제 rm -Rf ~/.gradle

[ANDROID] onvif ptz (2) [내부링크]

생각보다 onvif 쪽 게시글에 방문하시는 분들이 많은 것 같아 여러가지 지식을 공유하려 한다. 물론 안드로이드 jni 기준이다! 나는 안드로이드에 onvif 라이브러리를 아래 github에 있는 코드를 포팅했다. 아래 코드는 c코드로 되어있다. https://github.com/As772309423/onvif-server-with-rtsp/tree/a1545162ff9e12efcf303cf403cdc4e4ab90ecc8 GitHub - As772309423/onvif-server-with-rtsp: The main function of this project is onvif server-side device discovery and docking The main function of this proje..

[FFMPEG] 오디오 덤프 뜨는 법 [내부링크]

ffmpeg -i rtsp://ip:port -acodec copy C:\path\test.opus 위 처럼 하면 지정한 경로에 덤프 떠진 오디오 파일이 생성된다.!

[ANDROID] JNI Error:(150) undefined reference to '함수이름' [내부링크]

JNI 빌드 시 Error:(150) undefined reference to '함수이름' 라고 에러가 뜨면서 빌드가 실패하는 경우가 종종 있다. 왜 그런지 열심히 구글링 한 결과............... 나는 ~.c 파일의 함수들이 선언된 헤더를 ~.cpp 파일에서 그냥 #include로만 사용했기 때문이다. 이를 해결하기 위해선.. #ifdef __cplusplus extern “C” { #endif #include “cy.h” #ifdef __cplusplus } #endif 위와 같이 c 헤더 파일을 사용한다는 의미의 조건문을 써주면 빌드 완료!!!

[ANDROID] JNI (c++) 에서 JAVA 함수 콜하기 [내부링크]

자바에서 이벤트 처리를 할 때 jni쪽으로 전달할 순 있지만, 역으로 jni 쪽에서 이벤트 처리를 할 때 java 쪽으로 이벤트를 주고 싶었다. 근데 이미 짜여져 있는 코드에서 추가 수정 작업을 하려니 JNIEnv *env 위 env 변수가 발목을 잡았다. 따로 전역변수 선언해서 저장해 놓고 쓸 수가 없었다................ 그래서 삽푸다가 겨우 해결한 방안은 다음이다. static JavaVM *rjvm = NULL; static jobject robject = NULL; extern "C" JNIEXPORT void JNICALL Java_com_cy_test_MainActivity_onvifStartServer( JNIEnv *env, jobject thiz) { main_onvif_se..

[ANDROID] Mediacodec을 사용한 높은 비트레이트 낮추기 [내부링크]

후 완전 삽펐다. 업무시간 7시간을 날렸다.. onPreviewFrame에서 넘어온 데이터를 미디어 코덱에 넣고 인코딩 돼서 나온 데이터 크기가 20만이 넘었다. 즉, bufferinfo size가 20만이 넘은 것이다. 물론 중간에 한 번씩 20만 넘는 사이즈로 튀는건 괜찮은데 계속 20만 이었다가 중간에 한 번씩 80만으로 튀는 현상이 발생했다...... mMediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 2000000); 위 코드에서 비트레이트 값을 아무리 바꿔봐도 1도 적용이 안돼보였다... 위 그림에서 sum * 8 값이 계산된 비트레이트 값인데 약 60메가가 나온다. 해결 방법은 간단하다. mMediaFormat.setInteger(MediaFormat.K..

[ANDROID] onvif ptz [내부링크]

처음에 onvif 라는 것을 접하게 되었을 때, onvif가 뭐지... ptz 기능을 컨트롤 할 수 있다는데 ptz는 또 뭐지.. 싶었다. 아무래도.. 카메라 쪽을 이렇게 심화적으로 다루는게 익숙치 않다 보니 처음 접하는 것도 너무 많았다 ㅜ 우선 간단하게 의미를 짚어보고 가겠다. ONVIF란 ? 1. (Open Network Video Interface Forum) 오픈 네트워크 비디오 인터페이스 포럼의 약자로 보안목적의 물리적인 IP기반 제품에 사용되는 프로토콜 2. 영상, 음성, 이벤트 송수신 : RTP/RTSP // 제어, 설정, 조회 : WSDL, SOAP 3. HTTP기반 프로토콜 PTZ란 ? - 회전 (PAN), 수직 방향 기울기 (Tilt), 줌 (Zoom) 만약 ptz 기능을 가진 ip카..

[ANDROID] ONVIF 라이브러리 [내부링크]

https://github.com/RootSoft/ONVIF-Java GitHub - RootSoft/ONVIF-Java: A Java client library to discover, control and manage ONVIF-supported devices. A Java client library to discover, control and manage ONVIF-supported devices. - GitHub - RootSoft/ONVIF-Java: A Java client library to discover, control and manage ONVIF-supported devices. github.com https://github.com/extinguish/onvif-camera GitHub..

[FFMPEG/VLC] TCP 스트리밍 방법 (Live555 기준) [내부링크]

(1) FFMPEG TCP 스트리밍 방법 ffplay -rtsp_transport tcp -i rtsp://xxx.xxx.xxx.xxx:xxxx/ (2) VLC TCP 스트리밍 방법 1. 도구 > 환경설정 2. 상단 입력/코덱 창에서 하단 우측 "RTSP (TCP) 위에서 RTP 사용 선택 후 저장

[ANDROID] Library AAR 파일 생성 [내부링크]

aar 만드는 방법은 생각보다 간단했다.! 1. MainActivity 삭제 지워도 상관 없을 것 같으나 나는 그냥 지워줬다 여기서 AndroidManifest.xml도 수정해줘야 한다. 2. Plugins ID 수정 //기존 코드 plugins { id 'com.android.application' } //아래와 같이 수정 plugins { id 'com.android.library' } 3. defaultConfig applicationId 제거 defaultConfig { // applicationId "com.test.testaar" minSdkVersion 16 targetSdkVersion 30 versionCode 1 versionName "1.0" testInstrumentationRunn..

[ANDROID] Failed to apply plugin [id 'com.github.dcendents.android-maven'] [내부링크]

git에 있는 오픈 소스를 가져와 빌드를 하려 하니 아래와 같은 에러가 나며 빌드가 실패했다. > Failed to apply plugin [id 'com.github.dcendents.android-maven'] > Could not create plugin of type 'AndroidMavenPlugin'. > Unable to determine constructor argument #1: missing parameter of type Factory, or no service of type Factory. 해결 방법 해당 프로젝트 build.gradle에는 다음과 같이 되어있었다. buildscript { repositories { jcenter() google() } dependencies { c..

[SWIFT] AVPlayer Background 재생 [내부링크]

핸드폰이 슬립모드 가거나, 전원을 끄거나, 앱을 잠시 숨겨놓거나 등... 앱이 background로 이동하면 모든 활동이 멈춘다. 이때, 오디오 재생을 background에서도 재생하고 싶다면?! 한 줄만 코딩하면 된다. 백그라운드 재생 설정 do { try AVAudioSession.sharedInstance().setCategory(.playback) } catch { }

[SWIFT] Wifi 연결하기 [내부링크]

코드 상에서 wifi를 연결할 수 있다. 하지만... 신호가 안 좋은 와이파이일 경우 "연결할 수 없습니다"라는 팝업이 종종 뜨긴 한다 라이브러리 import NetworkExtension Wifi 연결하기 func connectToWifi(wifiName: String, wifiPassword: String, wep: Bool, completion: @escaping ((_ error: Bool) -> Void) ) { let hotspotConfig = NEHotspotConfiguration(ssid: wifiName, passphrase: wifiPassword, isWEP: wep) hotspotConfig.joinOnce = true NEHotspotConfigurationManager.sha..

[SWIFT] 퍼센트 인코딩을 character로 변환 [내부링크]

후.. 개삽질했다. url을 player로 재생하려고 했는데 자꾸 재생이 안돼서.... 2시간 버린 것 같다 ㅜ 알고보니 url이 퍼센트 인코딩이 되어있어 ios, mac에서는 재생이 안됐다. 예) let stringUrl = "http://www.test.com/mp3file/test%28testfile%29.mp3" 퍼센트 인코딩 character if let url = stringUrl.removingPercentEncoding { print("url : \(url)") } 다음과 같이 하면 퍼센트 인코딩을 없앨 수 있다 ㅜㅜㅜㅜㅜ

[SWIFT] 오늘 날짜 & 시간, string to date, date to string [내부링크]

이번 포스팅에서는 date 관련해서 다뤄보려고 한다. 현재 날짜 & 시간 구하기 func getNowTime() -> String { let now = Date() let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" dateFormatter.timeZone = NSTimeZone(name: "ko_KR") as TimeZone? return dateFormatter.string(from: now) } String to Date func getStringToDate(strDate:String, format:String) -> Date { let dateFormatter = DateFormatte..

[SWIFT] Web Socket (Stomp) [내부링크]

오늘은 웹소켓, 그중에서도 stomp를 다뤄보려고 한다. 이유는.. stomp client 쪽을 개발하면서 진짜 삽질도 많이 하고 게다가 swift stomp web socket에 대한 정보가 많이 없기 때문이었다.. 그래서 내가 경험하고 부족한 부분들은 어떻게 처리했는지 포스팅 해보려고 한다. 사용 라이브러리 : StompClientLib Podfile ... target 'Project_Name' do pod 'StompClientLib' ... 다음과 같이 작성하고 pod install ! 기본 예제 import StompClientLib class StompManager { static let shared:StompManager = StompManager() private let url = URL..

[SWIFT] iphone 슬립 모드(화면 자동 잠금) 방지 [내부링크]

화면 자동 잠금을 설정해 놓은 경우.. 앱에서 소켓 통신 시 소켓이 끊겨버린다. 이 때문에 슬립 모드 방지하는 방법을 찾아냈다. UIApplication.shared.isIdleTimerDisabled = true 짜잔. 위의 한 줄이면 화면 자동 잠금을 설정해놔도 앱이 실행되고 있는 동안에는 화면이 꺼지지 않는다.!!!!! 위의 코드는 SceneDelegate.swift 파일에 scene 함수 안에다 작성해두면 된다. func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let _ = (scene as? UIWindowScen..

[SWIFT] Root View 변경하기 [내부링크]

앱을 개발하다 보면 뷰가 계속 쌓여서 신경쓰일 때가 있다. 이럴 때, root view를 변경하고 나머지 뷰를 없애고 싶어진다. Root View 변경하기 extension UIWindow { func replaceRootViewController(_ replacementController: UIViewController, animated: Bool, completion: (() -> Void)?) { let snapshotImageView = UIImageView(image: self.snapshot()) self.addSubview(snapshotImageView) let dismissCompletion = { () -> Void in // dismiss all modal view controller..

[SWIFT] 최상위 뷰 구하기 [내부링크]

우선, 최상위 뷰를 구하기 전에 필요한 코드가 있다. UIApplication.shared.keyWindow? ~~ 하지만 위의 코드를 사용해도 빌드에는 문제가 없지만, iOS 13부터는 deprecated 되었다고 경고문이 뜬다. 그래서 대체할 코드를 전역 변수로 선언해 놓자! let keyWindow = UIApplication.shared.connectedScenes .filter({$0.activationState == .foregroundActive}) .map({$0 as? UIWindowScene}) .compactMap({$0}) .first?.windows .filter({$0.isKeyWindow}).first 최상위 뷰 구하기 extension UIWindow { public var ..

[SWIFT] URL to UIImage [내부링크]

요즘 블로그 포스팅이 뜸했다.... 3개월 간 맨 땅에 헤딩하면서 iOS 앱 개발을 하느라 정신이 없었다... 이제 여유가 좀 생겼으니 여태 개발하면서 도움이 된 정보들을 포스팅 하려고 한다. URL을 UIImage로 변환하기 func urlToImage(strUrl:String) -> UIImage? { if strUrl.isEmpty || strUrl.count == 0 { return nil } do { let url = URL(string: strUrl) if url != nil { let data = try Data(contentsOf: url!) return UIImage(data: data) } } catch (let error) { print("\(error)") } return nil }..

[SWIFT] IBDesignable 에러 대응 방법 [내부링크]

medium.com/@esung/ibdesignable-%EC%97%90%EB%9F%AC%EC%97%90-%EB%8C%80%EC%9D%91%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95-254001a648f6 IBDesignable 에러에 대응하는 방법 Originally published at www.notion.so. medium.com

[SWIFT] error: projectName/Pods/Pods...ProjectName.debug.xcconfig unable to open file [내부링크]

error: projectName/Pods/Pods...ProjectName.debug.xcconfig unable to open file Pod 관련된 파일들을 모조리 삭제해주자. Podfile Podfile.lock Pods ProjectName.xcworkspace 관련 파일들을 삭제했다면 다시 pod을 생성! $ pod init $ pod install $ open ProjectName.xcworkspace 정상적으로 실행 완료!

[SWIFT] TextField Height [내부링크]

textfield height 조절 방법@!!! 다음과 같이 textfield height 변경하는 란이 비활성화 되어있는 것을 볼 수 있다... 이런경우에, textfield style을 변경해주면 된다!!! textfield 클릭 오른쪽 상단 5번째 아이콘 Border Style 에서 4번째 round style을 제외한 나머지 style로 변경! 다음과 같이 height 변경하는 란이 활성화 된 것을 볼 수 있음! 야호

[SWIFT] WIFI Info [내부링크]

1. Info.plist 작성 (위치 접근 권한) 2. SSID class public class SSID { class func fetchNetworkInfo() -> [NetworkInfo]? { if let interfaces: NSArray = CNCopySupportedInterfaces() { var networkInfos = [NetworkInfo]() for interface in interfaces { let interfaceName = interface as! String var networkInfo = NetworkInfo(interface: interfaceName, success: false, ssid: nil, bssid: nil) if let dict = CNCopyCurren..

[SWIFT] BMPlayer [내부링크]

1. Podfile 작성 ※ swift 버전 별 BMPlayer 버전 참고 2. BMPlayerCustomControlView.swift import UIKit import BMPlayer class BMPlayerCustomControlView: BMPlayerControlView { var playbackRateButton = UIButton(type: .custom) var playRate: Float = 1.0 var rotateButton = UIButton(type: .custom) var rotateCount: CGFloat = 0 /** Override if need to customize UI components */ override func customizeUIComponents() {..

[SWIFT] Podfile 작성 [내부링크]

1. 프로젝트 폴더로 이동 2. Podfile 생성 3. Podfile 열기 4. 외부 라이브러리 import 5. pod install 6. 생성된 프로젝트명.xcworkspace 를 open

[SWIFT] CoreBluetooth 예제 [내부링크]

import UIKit import CoreBluetooth class ViewController: UIViewController { @IBOutlet weak var tblOfList: UITableView! @IBOutlet weak var btnOfScan: UIButton! @IBOutlet weak var lblOfDeviceName: UILabel! var peripherals:[CBPeripheral] = [] var centralManager: CBCentralManager! override func viewDidLoad() { super.viewDidLoad() self.tblOfList.tableFooterView = UIView() centralManager = CBCentralMan..

[SWIFT] Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set? [내부링크]

프로젝트를 실행시키는데 다음과 같은 에러가 났다. Failed to instantiate the default view controller for UIMainStoryboardFile 'Main' - perhaps the designated entry point is not set? main으로 설정된 뷰 컨트롤러가 없다는 뜻이었다. Main.storyboard에서 view controller를 클릭해주면 오른쪽 상단 7개 아이콘 중 5번째 아이콘 클릭! 그럼 View Controller > Title 적는 곳 밑에 Is Initial View Controller 체크하는 곳이 있을 것이다. 체크하면 메인 뷰 컨트롤러로 설정됨!!

[SWIFT] DatePicker 생년월일 Wheel Style [내부링크]

1. DatePicker 추가 - DatePicker 클릭 후 오른쪽 상단에 7개 아이콘 중 5번째 아이콘 클릭 Preferred Style : Wheels 선택 Mode : Date 선택 2. 이벤트 처리 import Foundation import UIKit class ViewController4 : UIViewController { @IBOutlet weak var ltextDate: UILabel! override func viewDidLoad() { ltextDate.text = "" } @IBAction func datePick(_ sender: UIDatePicker) { let dateformatter = DateFormatter() dateformatter.dateFormat = ..

[SWIFT] Camera & Gallery Image Pick [내부링크]

1. 버튼 추가하기 class ViewController3 : UIViewController { @IBOutlet weak var cameraBtn: UIButton! override func viewDidLoad() { super.viewDidLoad() cameraBtn.setImage(UIImage(named: "cameraicon.png"), for: .normal) } } 2. 버튼 이벤트 추가하기 @IBAction func imgPickerBtn(_ sender: UIButton) { let alert = UIAlertController(title: "Select one.", message: nil, preferredStyle: .actionSheet) let library = UIAlertA..

맥북으로 아이패드 혹은 아이폰 UUID 확인하기 [내부링크]

생각보다 간단하다! 1. 맥북에 아이패드 혹은 아이폰 연결 2. finder 열기 왼쪽 리스트에서 위치-iPhone 클릭 3. 상단에 iPhone 이름 밑에 정보 클릭 - iPhone XR 120.48GB 96% ~~ 다음과 같이 써있는 라인 클릭 4. 클릭한 라인에 일련번호 및 UUID 정보 나옴! 확인!

[SWIFT] Tap Gesture - Keyboard Hide [내부링크]

textfield를 구현하고 키보드로 입력 후 return을 누르던, 키보드 밖을 누르던 없어지지를 않았다... Tap Gesture로 Keyboard Hide extension ViewController { func initializeHideKeyboard() { let tap:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard)) view.addGestureRecognizer(tap) } @objc func dismissKeyboard() { view.endEditing(true) }; } - extension 옆에는 확장하려는 class명을 써주면 됨. (꼭 extension에 구..

[SWIFT] EXTENSION [내부링크]

EXTENSION - 존재하는 클래스, 구조체, 열거형, 프로토콜 타입에 새롭게 기능적인 부분 추가할 수 있는 문법 - 이전의 내부 소스를 접근할 수 없는 원본 타입들에 대해 새로운 기능 부여 가능 EXTENSION 기능 - 계산 property, 계산 타입 property 추가 기능 - instance method, type method 정의 - 새로운 initializer 제공 - subscripts(첨자) 접근방식 정의 - nested type(중첩 타입) 정의 및 사용 - 특정 프로토콜을 준수하는 현존 타입 정의 - 전역 함수가 아닌 프로토콜 자체에서 동작 정의 가능 EXTENSION 예 extension RandomNumberGenerator { func randomBool() -> Bool {..

[SWIFT] Autoresizing [내부링크]

우선 Widget을 하나 드래그! 난 Image View로 선택 이제 제일 아래쪽에 보면 View as: iPhone 11이라고 선택된 Device를 볼 수 있음! 클릭! 그럼 다음 그림과 같이 선택 가능한 Device가 쫘르륵 보일 것임 나는 iPad(8th generation) 선택! 그럼 다음과 같이 비율이 조정 안되는 모습 확인 가능 다시 iPhone 11로 돌아와서,, Image View 클릭 후 오른쪽 상단 7개 아이콘 중 6번째 아이콘 클릭! 그럼 다음과 같이 Autoresizing이 보임! 저 과녁처럼 생긴 그림에서 빨간 선들을 클릭해서 보면 어떻게 Resizing되는지 확인 가능! 그럼 다음과 같이 비율이 맞춰지는 것을 볼 수 있음 ㅎㅎㅎ

[SWIFT] View Controller 수명주기 [내부링크]

View Controller 수명주기 viewDidLoad() view controller content view (뷰 계층 구조의 맨 위) 생성되고 story board에서 load될 때 호출됨. view controller 출력은 method가 호출될 때까지 유효한 값을 갖도록 보장 content view가 처음 생성될 때 한 번만 호출 (초기화 코드 있을 경우 작성) controller가 처음 instance화 될 때 content view가 반드시 생성되는 것은 아님 system이나 code가 controller view 속성에 처음 access할 때 느리게 생성됨. viewWillAppear() controller content view가 앱의 view 계층 구조에 추가되기 직전에 호출됨 con..

[SWIFT] 로컬 파일 로드하는 방법 [내부링크]

후..... 진짜 몇시간을 삽질하다가 겨우 성공했다 ㅜㅜㅜ 나는 바보인가보다.. 로컬 파일 로드하는 방법!!! 1. 프로젝트 내에 로컬 파일 추가 (나는 Resource/butterfly.mp4 추가) 2. Build Phases > Copy Bundle Resources > + 버튼으로 추가한 로컬 파일 Add - 프로젝트 이름을 클릭하면 기본 설정 창이 뜸! 거기서 설정해주면 됨 3. 로컬 파일 로드 - 나는 URL 형식이 필요해서 다음과 같이 path를 얻고 url로 변환했다. let path = Bundle.main.path(forResource: "butterfly", ofType: "mp4")! let pathUrl = URL(fileURLWithPath: path)

[SWIFT] WKWebView [내부링크]

WKWebView - WebView 기능 제공해주는 라이브러리 - 기존 UIWebView 대체하여 적용 (UIWebView는 iOS 9 기준으로 deprecate) - 더 빠른 자바스크립트 엔진인 Nitro 사용 - iOS 9 이상 버전 필요. 하위 버전과의 호환 이슈 있을 수 있음 - 로컬로 저장된 파일에 대한 Ajax 요청 지원 안함. - 쿠키 허용 설정 지원 안함, 고급 캐시 설정 지원 안함, 앱 종료 시 HTML 5 로컬 스토리지 삭제 WKUIDelegate, WKNavigationDelegate - WKUIDelegate : JavaScript, 기타 플러그인 컨텐츠 이벤트 캐치하여 동작. 웹 페이지 기본 사용자 인터페이스 요소 제공 - WKNavigationDelegate : 프로토콜로 페이지..

[SWIFT] Lamp On Off App [내부링크]

1-1. 프로젝트에 사용할 image 드래그 - Copy items if needed 체크! 1-2. 이미지 확인 (lamp_off.png, lamp_on.png) 2-1. 이미지 뷰 추가하기 - 상단에 하얀색 동그라미로 표시한 + 버튼 클릭 후 image view 검색 → 뷰로 드래그 2-2. 이미지 뷰 크기 조정 및 Aspect Fit으로 설정 (뷰에 비율에 맞게 들어가기 위함) - 오른쪽 상단에 아이콘 7개 중 5번째 아이콘 클릭 → View > Content Mode에서 Aspect Fit 선택 2-3. 버튼 추가하기 - 과정과 똑같이 오른쪽 상단 + 버튼 클릭 후 button 검색 → 뷰로 드래그 3-1. Assistant 선택 3-2. Assistant 선택 후 화면 4-1. 이미지 뷰 Out..

[SWIFT] 기본 연산자 [내부링크]

할당 연산자(Assignment Operator) - 값 초기화 및 변경. 상수, 변수에 모두 사용 가능 - 튜플을 이용해 여러 값 한 번에 할당 가능 let b = 10 var a = 5 a = b print(a) // 10 let(x,y) = (1,2) print(x, y) //1 2 if x = y { //x = y는 값을 반환하지 않기 때문에 올바른 문법이 아님 } if x == y { print("same") } else { print("different") } // different 사칙 연산자 (Arithmetic Operators) - 모든 숫자 형에서 사칙 연산자 지원 - 덧셈 연산자로 문자열 합치기 가능 "hello, " + "world" // hello, world 나머지 연산자 (R..

[SWIFT] Xcode 프로젝트 생성 [내부링크]

1. Create a new Xcode project 클릭 2. App 선택 ! (난 앱만들거다!) 3. 각각 입력! - Product Name : 앱 이름 - Team : 개발자 프로그램에 등록된 ID or Team. 처음 시작할 때는 시뮬레이션을 사용할 것이므로 입력하지 않아도 됨 - Organization Identifier : 조직의 식별자 입력. 개인이나 조직의 도메인 주소를 역순으로 입력! - Bundle Identifier : 식별자. com.your_company.product_name으로 자동 생성 - Interface : SwiftUI(iOS 13부터 사용 가능)와 Storyboard 중 Storyboard 선택 - Life Cycle : Storyboard에서는 UIKit App De..

[Flutter] Login App (3) [내부링크]

1. get package 사용 2. 이메일 유효성 검사 3. 비밀번호 obscure suffix icon event 4. login button event 1. 기본 틀 구현 // @dart=2.9 import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; class Login extends StatelessWidget { final TextEditingController _email = new TextEditingController(); final TextEditingController _pass = new TextEditingController(); Strin..

[Flutter] native code 호출하기 [내부링크]

flutter.dev/docs/development/platform-integration/platform-channels?tab=android-channel-java-tab Writing custom platform-specific code Learn how to write custom platform-specific code in your app. flutter.dev native code를 어떻게 호출하는지와, java와 kotiln을 혼용해도 잘 동작하는지 테스트! android/app/src/main/kotlin/your_package_name/MainActivity.kt package net.koolsign.flutter_app0324 import android.content.Context im..

[Flutter] Card [내부링크]

결과 전체 코드 // @dart=2.9 import 'package:flutter/material.dart'; import 'package:get/get.dart'; void main() => runApp(GetMaterialApp( home: MyStatelessWidget(), )); /// This is the stateless widget that the main application instantiates. class MyStatelessWidget extends StatelessWidget { @override Widget build(BuildContext context) { return Center( child: Card( child: Column( mainAxisSize: MainAxisS..

[Flutter] Unsound null safety 관련 [내부링크]

dart.dev/null-safety/unsound-null-safety#testing-or-running-mixed-version-programs Unsound null safety Mixing language versions lets you migrate to null safety at your own pace, with some of the benefits of null safety. dart.dev

[Flutter] Dice App [내부링크]

project_name/images 사진 넣기 pubspec.yaml flutter: uses-material-design: true assets: - images/ MaterialApp GetMaterialApp void main() { return runApp( GetMaterialApp( home: Scaffold( backgroundColor: Colors.lime, body: _DicePage(), ), ), ); } Controller class class Controller extends GetxController { var _leftDiceNumber = 1.obs; var _rightDiceNumber = 1.obs; changeDiceFaceLeft() { _leftDiceNumbe..

[Flutter] Shared preferences [내부링크]

나는 get과 좀 더 친해지고 싶어서 참고한 블로그 코드에서 get 패턴으로 수정했다.!!!! pubspec.yaml dependencies: flutter: sdk: flutter shared_preferences: get: MaterialApp GetMaterialApp void main() => runApp(GetMaterialApp( home: MyHomePage(title: 'Shared preferences demo'), theme: ThemeData( primarySwatch: Colors.blue, ), )); Controller class class Controller extends GetxController { var _counter = 0.obs; bool _isFirst = tr..

[Flutter] cached_network_image [내부링크]

cached_network_image - 캐시된 이미지 사용하는 방법. offline 상태에서도 이미지를 볼 수 있다고 한다. - 한 번 실행해서 이미지를 다운 받은 후에 인터넷 연결 해제한 후 다시 실행해도 됨 pubspec.yaml dependencies: flutter: sdk: flutter cached_network_image: ^2.5.1 main.dart import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widge..

[Flutter] get package (2) [내부링크]

경로 관리 GetMaterialApp( home: MyHome(), ) MaterialApp 앞에 "Get"을 추가하여 GetMaterialApp으로 변경 Get.to(NextScreen()); 새 화면으로 이동 Get.toNamed('/details'); 이름이 있는 새 화면으로 이동 Get.back(); snackbars, dialogs, bottomsheets를 닫으려면 Navigator.pop(context)를 썼음 Get.off(NextScreen()); 다음 화면으로 이동. 단, 이전 화면으로 돌아가는 옵션이 없는 경우 (예 : Splash 화면, 로그인 화면 등) Get.offAll(NextScreen()); 다음 화면으로 이동. 단, 이전 경로를 모두 취소하는 경우 (..

[Flutter] get package (1) [내부링크]

pub.dev에서 어떤 package들을 많이 사용할까 를 찾아보다가 get 이라는 package를 보았다. pubspec.yaml dependencies: get: Counter App 만들기 MaterialApp GetMaterialApp 변경 void main() => runApp(GetMaterialApp(home: Home())); - GetMaterialApp은 MaterialApp이 자식으로 있는 미리 구성된 위젯이라고 한다. Controller class class Controller extends GetxController { RxInt count = 0.obs; increment() => count++; } - .obs를 사용하여 해당 변수를 관찰 가능한 변수로 만든다. (앞의 값을..

[Flutter] GestureDetector [내부링크]

최종 코드 import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatefulWidget { @override _GestureDetectorExample createState() => _GestureDetectorExample(); } class _GestureDetectorExample extends State { late String msg; late String direction; double _scaleFactor = 1.0; double _baseScaleFactor = 1.0; @override void initState() { msg = 'gesture'; direction = '..

[Flutter] Bluetooth [내부링크]

pub.dev/packages/flutter_blue/example flutter_blue | Flutter Package Flutter plugin for connecting and communicating with Bluetooth Low Energy devices, on Android and iOS pub.dev main.dart // Copyright 2017, Paul DeMarco. // All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. import 'dart:async'; import 'dart:math'; import 'pa..

[Flutter] Provider (2) [내부링크]

3. MultiProvider - Provider가 여러개일수록 관리가 어려워짐. 중첩될 경우에는 앱이 난잡해지기 쉬움 - MultiProvider는 Provider 관리가 상당히 편해짐 - MultiProvider의 providers 속성에 원하는 Provider 적어주면 됨 3-1. MultiProvider 사용 Widget build(BuildContext context) { return MultiProvider( providers: [ Provider.value(value: 1), Provider.value(value: "test"), ], ); } - Provider는 자료형으로 어떤 값을 가져올지 구분 3-2. MultiProvider 사용 2 MultiProvider( providers: [..

[Flutter] Provider (1) [내부링크]

1. Provider - 하나의 데이터를 여러 페이지에 공유 가능 - 한 클래스는 하나의 역할만 갖도록 분리 가능 - 코드의 간결함 1-1. Provider 데이터 생산 Provider.value( value: 5, child: MaterialApp( home: SimplePage(), ), ) - Provider의 child에서 값 공유 가능 - Provider에서 제공하는 값(value)은 5 1-2. Provider 데이터 소비 var data = Provider.of(context); - Provider.of(context) 또는 Consumer() 위젯 사용하여 소비 2. ChangeNotifierProvider 사용 - 변하는 값 처리 - setState()와 ChangeNotifier는 같은..

[Flutter] Login App (2) [내부링크]

이전에 만들었던 login app에서 비밀번호 visible 이벤트를 주려고 한다. StatelessWidget StatefulWidget 변경 class Login extends StatefulWidget { const Login(this.onSubmit); final VoidCallback onSubmit; @override LoginState createState() => LoginState(onSubmit); } class LoginState extends State { ... } TextField icon 추가 및 이벤트 주기 bool _isobscure = true; @override void initState() { _isobscure = true; } TextField( controll..

[Flutter] Vlc Player & Circular Percent Indicator [내부링크]

영상 플레이와 현재 재생 시간의 circular percent indicator를 해보았다. pubspec.yaml dependencies: flutter: sdk: flutter percent_indicator: flutter_vlc_player: ^4.0.1 영상 play 그 전에 포스팅했던 video_player는 현재 재생 시간을 보는 방법을 몰라서,, flutter_vlc_player로 대체하려고 한다. class _VideoDemoState extends State { Key _key = GlobalKey(); String url ="https://www.learningcontainer.com/wp-content/uploads/2020/05/sample-mp4-file.mp4"; late Vl..

[Flutter] Custom Horizontal Number Picker [내부링크]

참고 : github.com/levent-kantaroglu/horizontal_picker levent-kantaroglu/horizontal_picker Contribute to levent-kantaroglu/horizontal_picker development by creating an account on GitHub. github.com 위의 분 number picker를 토대로 custom 했다. ListWhellScrollView 안 숫자 데이터를 세로 선으로 변경 Column( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, children: [ Padding( padding: EdgeInsets.sy..

[Flutter] Horizontal Number Picker [내부링크]

pubspec.yaml dependencies: flutter: sdk: flutter numberpicker NumberPicker 구현 NumberPicker( value: _currentHorizontalIntValue, minValue: _minValue, maxValue: _maxValue, step: 1, itemHeight: 100, axis: Axis.horizontal, onChanged: (value) => setState(() => _currentHorizontalIntValue = value), ) 현재 pick한 number 보여주기 Text( _currentHorizontalIntValue.toString(), style: TextStyle( fontSize: 40, fontWe..

[Flutter] DatePicker (iOS style) [내부링크]

pubspec.yaml dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.2 intl: flutter_localizations: sdk: flutter Locale 설정 class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Image Picker Demo', home: MyHomePage(), debugShowCheckedModeBanner: false, localizationsDelegates: [ GlobalMaterialLocalizations.delegate, GlobalCupertinoLocali..

[Flutter] Image Picker [내부링크]

pubspec.yaml dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.2 image_picker: Button 만들기 Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ FloatingActionButton( onPressed: getImageFromCam, tooltip: 'Pick Image', child: Icon(Icons.add_a_photo), ), FloatingActionButton( onPressed: getImageFromGallery, tooltip: 'Pick Image', child: Icon(Icons.wallpaper), ), ], ) Camera Eve..

[Flutter] Login App (1) [내부링크]

main.dart import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'settings.dart'; import 'login.dart'; import 'package:fluttertoast/fluttertoast.dart'; void main() => runApp(MyApp()); class MyApp extends StatefulWidget { @override State createState() { return _MyAppState(); } } class _MyAppState extends State { late String _title = 'Please Login'; late Widget _sc..

[Flutter] wifi connect 정보 [내부링크]

* IOS 13이상부터는 getWifiBSSID()와 getWifiName() 함수는 null로 반환된다고 한다. 알 수 있는 정보는.. 어디에 연결되어있는지와 ip뿐이다..ㅜㅜ pubspec.yaml environment: sdk: ">=2.12.0

[Flutter] Webview JavaScript Handler 등록 [내부링크]

진짜 헤매고 헤매다가.. 겨우 성공한 javascript handler 등록하기!!!! assets/index.html TEST Example!!! 위와 같이 handlerFoo, handlerFooWithArgs 2개의 핸들러를 호출한다! callHandler('handlerFoo')는 main.dart로부터 결과를 받아 출력하는 부분이고, callHAndler('handlerFooWithArgs')는 main.dart로 아규먼트들을 보내는 부분이다.! pubspec.yaml environment: sdk: ">=2.12.0

[Flutter] WebView JS 통신 [내부링크]

오늘은 웹과 앱에서의 JS통신을 구현해봤다. html과 javascript까지 봐야하니까.... 너무 어렵다................... 하지만 그래도 해야하기에 (T^T) html 파일 작성 The navigation delegate is set to block navigation to the youtube website. webToApp appToWeb https://www.youtube.com/ https://www.google.com/ 여기서 WebToApp function은 alert를 띄워주고, 로그를 뿌려준다. appToWeb function은 alert를 띄워주고, container_box id를 가진 div의 backgroundcolor를 변경해준다. main.dart에 index...

[Flutter] Layout App (2) [내부링크]

* Layout App 이벤트 주기 import 'package:flutter/material.dart'; // Uncomment lines 7 and 10 to view the visual layout at runtime. // import 'package:flutter/rendering.dart' show debugPaintSizeEnabled; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { Widget titleSection = Container( padding: const EdgeInsets.all(32), child: Row( chi..

[Flutter] Layout App (1) [내부링크]

* layout app 만들기 레이아웃 구조는 다음과 같다. Title Section Widget titleSection = Container( padding: const EdgeInsets.all(32), child: Row( children: [ /*Row1*/ //Expanded : UI 상 남는 공간이 없게 화면을 꽉 채우고 싶을 때, //특정 컴포넌트들을 폰 화면 넓이에 맞게 비율로 적용하고 싶을 때 사용 Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ /*Column1*/ Container( padding: const EdgeInsets.only(bottom: 8), child: Text( 'O..

[Flutter] IOS 앱 구동 (2) [내부링크]

flutter 프로젝트로 이동하자 그리고 ios 프로젝트를 열어준다. 그럼 xcode가 실행이 될 것이다!! 왼쪽에 project 구조에서 Runner를 클릭하면 무슨 설정 창 같은게 뜰 것이다. 위처럼 Signing & Capabilities 탭에 들어가면 Team에 Add an account.. 라고 있을 것이다. 거기서 계정 추가해서 지정해줘야지 앱에서 빌드가 된다. 나는 내 아이폰에 빌드하려 했는데, 자꾸 다음과 같은 에러가 떴다. 이유는 즉슨,, 앱에서 내가 만든 앱을 신뢰하지 못해 발생한 에러였다. 아이폰에서 설정 > 일반 > 기기관리 > Apple Development: 내계정 에 들어오면 앱 신뢰에 대한 것이 있을 것이다. 신뢰해주고 다시 빌드해주면!!! 잘 올라간다!! 야호!!!!

[Flutter] IOS 앱 구동 (1) [내부링크]

android studio로 개발하던 프로젝트를 맥으로 가져와서 빌드하려고 했더니, Downloads Dart SDK 였나? 라고 뜨길래 다운받으려고 링크를 타고 들어갔다. dart.dev/get-dart $ brew tap dart-lang/dart $ brew install dart 위에 처럼 터미널에서 명령어를 쳐줬더니 Dart SDK 설치 완료! $ brew info dart 위 명령어로는 dart의 정보를 볼 수 있다. 위의 그림이 dart 의 정보이다. 맨 아래에 Dart SDK 경로를 보여주는데, 이것을 android studio에서 dart sdk경로 설정해주면 된다. Languages & Frameworks > Dart에서 Enable Dart support for the project ..

[Flutter] Flutter http [내부링크]

http 패키지 추가하기 dependencies: flutter: sdk: flutter http: 0.13.0 pub.dev/packages/http/example _MyAppState(); } Future fetchPost() async { final response = await http.get(Uri.https('jsonplaceholder.typicode.com', '/posts/1')); if (response.statusCode == 200) { // 만약 서버가 OK 응답을 반환하면, JSON을 파싱합니다. return Post.fromJson(json.decode(response.body)); } else { // 만약 응답이 OK가 아니면, 에러를 던집니다. throw Exception..

[Deep Learning] jupyter notebook 설치 [내부링크]

1. jupyter 설치 cmd 창을 열어 다음과 같이 설치 > pip3 install jupyter 2. jupyter notebook 실행 설치가 다 되었다면 다음과 같이 실행 > jupyter notebook 3. 완료

[Flutter] Flutter VideoPlayer [내부링크]

* VideoPlayer pubspec.yaml dependencies: flutter: sdk: flutter video_player: Android-/android/app/src/main/AndroidManifest.xml iOS-/ios/Runner/Info.plist NSAppTransportSecurity NSAllowsArbitraryLoads VideoPlayerController 생성 및 초기화 1. StatefulWidget, State class 생성 2. State class에 VideoPlayerController 저장하기 위한 변수 추가 3. State class에 VideoPlayerController.initialize로부터 반환되는 Future 저장하기 위한 변수 추가 4. ..

[Flutter] Flutter Widget [내부링크]

* Text Text( 'Hello World!!!', style: TextStyle( color: Colors.red, fontSize: 20.0, fontStyle: FontStyle.italic ), ) * Row : 가로로 레이아웃 생성 Row( //mainAxisAlignment : 자식의 수평 배열 생성 //MainAxisAlignment.spaceEvenly : 균등 배치 mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Image.asset('images/pic1.png'), Image.asset('images/pic2.png'), Image.asset('images/pic3.png'), ], ) * Column : 세로로 레이아..

[Flutter] Flutter App (4) [내부링크]

* Flutter 파일 구조 이쯤 되면 궁금해지는 Flutter project의 파일 구조... 파일들을 어떻게 나눠야 될지, 폴더명은 어떻게 하는 게 좋을지 궁금해서 찾아보았다. Root Directory of App (프로젝트 생성 시 만들어지는 기본 폴더가 아님) - Assets : 거의 대부분의 앱에서 반드시 사용해야 함. 로고나 사용자 지정 아이콘, 앱 전체에서 사용되는 정적 이미지 등.. 일단 이러한 요소들이 Assets 폴더에 저장되면 pubspec.yaml에 등록해줘야 함 - Fonts : Flutter에서 제공하는 기본 글꼴 사용 시 필요 없음 - Function : DB 사용 시 별도의 설정 필요한 경우 관련 함수 저장 → 실제 앱을 구동하는 코드와 구분 가능 lib Derectory ..

[Flutter] Flutter App (3) [내부링크]

* 좋아요 목록 보기 import 'package:flutter/material.dart'; import 'package:english_words/english_words.dart'; import 'package:flutter/rendering.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Startup Name Generator', debugShowCheckedModeBanner: false, ..

[Flutter] Flutter App (2) [내부링크]

* 좋아요 만들기 import 'package:flutter/material.dart'; import 'package:english_words/english_words.dart'; import 'package:flutter/rendering.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Startup Name Generator', home: RandomWords(), ); } } class Ran..

[Flutter] Flutter App (1) [내부링크]

* app 만들어보기 - Stateless 위젯 : 모든 속성(변수)들이 변하지 않음. 모든 값들은 final 선언 - Scaffold 위젯 : appBar, title, body property 제공 - StatelessWidget : 단 한번만 Build 과정 발생. 한 번 그려진 화면은 계속 유지되며, 성능상 장점 - StatefulWidget : state(데이터 상태) 포함하며, setState(데이터 변화) 발생할 때마다 다시 Build 과정 발생 동적 화면 쉽게 구현 가능 //pubspec.yaml dependencies: flutter: sdk: flutter # The following adds the Cupertino Icons font to your application. # Us..

[Flutter] Dart 문법 (stream, async*, yield) [내부링크]

* stream : 파이프 개념. - 값, 이벤트, 객체, 컬렉션, 맵, 오류 또는 심지어 다른 스트림에서 모든 유형의 데이터가 스트림에 의해 전달 가능 - async* : 게으른 연산. 요청이 있을 때는 연산을 미루다가 함수에서 사용 시 연산함 - yield : return과 비슷하게 값을 반환해주는데 한번에 하나씩 return함과 동시에 함수가 종료되지 않고 계속 열려있으면서 지속적으로 return 해줌. import 'dart:async'; Future sumStream(Stream stream) async { var sum = 0; await for (var value in stream) { sum += value; print("value : " + value.toString() + ", sum ..

[Flutter] Dart 문법(??=, ??, null 인식 연산자, cascade, ..) [내부링크]

* null 인식 연산자 : ??=, ?? * cascade (..연산자) : 자바의 builder 패턴과 유사. 객체 레퍼런스 변수 없이 바로 값 대입 가능 class Animal { var name = "dog"; var age; var sound; } main() { var a = 3; // ??= : 변수가 현재 널인 경우에만 변수에 값 지정 a ??= 4; print(a); // ?? : 왼쪽 표현식 값이 널이 아니면 왼쪽 표현식을, 널이면 오른쪽 표현식 리턴 print(1 ?? 3); print(null ?? 12); Animal animal = Animal(); print(animal.name); Animal? ani2; // ?. : null이면 null값 출력 print(ani2?.nam..

[Flutter] Dart 문법 (skip, take) [내부링크]

* skip, take - skip : 첫 번째 (count) 요소 제외한 모든 요소 제공하는 iterable 반환, 즉 count개 요소 제외한 모든 요소 - take : 이 iterable의 첫 번째 요소 (count) 개의 lazy iterable 반환, 즉 iterable의 첫 번째 요소부터 count개 까지의 lazy iterable 반환 String scream(int length) => "${'a' * length}"; main() { final values = [1, 2, 3, 5, 10, 50]; for (var length in values) { print(scream(length)); } print("\n"); var map = values.map(scream); print(map.r..

[Flutter] Dart 문법 (json) [내부링크]

* 클래스 직렬화 (Json) - Flutter는 간단한 json 인코더와 디코더가 내장된 dart:convert 라이브러리 가짐 - fromJson : map 구조에서 새로운 User 객체 생성하기 위한 생성자 - toJson : User 객체를 map 구조로 변환하기 위한 메서드 //user.dart class User { final String name; final String email; User(this.name, this.email); User.fromJson(Map json) : name = json['name'], email = json['email']; Map toJson() => { 'name': name, 'email': email, }; } //main.dart import 'use..

[Flutter] Dart 문법 (getter, setter) [내부링크]

* getter, setter class Rectangle { double left, top, width, height; Rectangle(this.left, this.top, this.width, this.height); //Define two calculated properties : right and bottom. double get right => left + width; set right(double value) => left = value - width; double get bottom => top + height; set bottom(double value) => top = value - height; void printRectangle() { print("===================..

[Flutter] Dart 문법 (async, Future, await, then) [내부링크]

* 비동기 - 아래 printWithDelay함수에서 await를 빼고 실행시키면 Future.delayed와 print가 동시에 실행되는 듯 하고, await을 넣고 실행시키면 delay가 적용된 후에 print가 실행된다. //Future : An object representing a delayed computation. //async : async 함수 본문 앞에 키워드 사용하여 비동기로 표시 //await : async 내에서 작동하는 기능. Future printWithDelay(Duration delay, String message) async { await Future.delayed(delay); print(message); } Future printWithDelay2() async { v..

[Flutter] Dart 문법 (abstract, implement) [내부링크]

* 추상클래스, implement : 추상클래스 및 일반 클래스 implement 가능. - implement하면 클래스가 구현해 둔 메서드도 재정의 해야할 강제성이 생김. (일반 메서드도 구현해야 함) class Spacecraft extends Describable { String? name; DateTime? launchDate; //Constructor, with syntactic sugar for assignment to members. Spacecraft(this.name, this.launchDate) { //Initialization code goes here. } Spacecraft.origin() { name = "무탈리스크"; launchDate = DateTime.now(); } /..

[Flutter] Dart 문법 (상속) [내부링크]

* 상속 class Spacecraft { String? name; DateTime? launchDate; //Constructor, with syntactic sugar for assignment to members. Spacecraft(this.name, this.launchDate) { //Initialization code goes here. } Spacecraft.origin() { name = "무탈리스크"; launchDate = DateTime.now(); } //Named contructor that forwards to the default one. Spacecraft.unlaunched(String name) : this(name, null); int? get launchYear =>..

[Flutter] Dart 문법 (class, ?, !, ?.) [내부링크]

* 클래스 ?, !, ?.등 각각이 의미하는 바를 파악하지 못해서 너무 헤맸지만 의미를 알고나니 코드가 이해가 갔다... class Spacecraft { // ? : 개체가 null일 수 있음 String? name; DateTime? launchDate; //Constructor, with syntactic sugar for assignment to members. Spacecraft(this.name, this.launchDate) { //Initialization code goes here. } Spacecraft.origin() { name = "무탈리스크"; launchDate = DateTime.now(); } //Named contructor that forwards to the defau..

[Flutter] Dart 문법 (변수, 함수, 화살표 함수, 조건문, 반복문) [내부링크]

* 변수 : 모든 변수들이 Calss 안에 있을 필요는 없다!! var name = 'Voyager I'; var year = 1977; var antennaDiameter = 3.7; var flybyObjects = ['Jupiter', 'Saturn', 'Uranus', 'Neptune']; var image = { 'tags': ['saturn'], 'url': '//path/to/saturn.jpg' }; class TestCalss { var fruit = "apple"; var num = 5; var sub_fruit = ['banana', "orange"]; } void main() { print(name); print(year); print(antennaDiameter); print(fl..

[Flutter] flutter 윈도우 설치 [내부링크]

구글에 flutter라고 검색하면 바로 첫번째로 나오는 사이트 아래 Install을 클릭한다. 해당되는 OS를 클릭한다 (나는 윈도우 설치니까 윈도우!) 그럼 다음과 같이 다운받는 버튼이 보일 것이다! 클릭! 나는 다운을 받고 압축은 D드라이브에 풀어줬다. D:\flutter 경로로.. 이제 환경변수 등록을 해보자! 내PC 에서 오른쪽 마우스 → 속성 클릭! 왼쪽에 보이는 고급 시스템 설정 → 고급 탭 → 하단에 환경변수 클릭 ! 사용자 변수 Path에서 설치경로\flutter\bin 을 넣어주면 된다! 그 후에 잘 되었는지 확인하려면 cmd창에서 flutter doctor 명령어 입력해주면 다음과 같이 잘 나온다!!

[정보처리기사 필기 요약] 시스템 소프트웨어 [내부링크]

* 시스템 소프트웨어 사용자가 하드디스크에 있는 파일 조작 시 사용자가 직접 처리 않고 이를 대신 처리하는 P/G 컴퓨터 HW를 실제로 운용하는 P/G P/G을 메모리에 적재하거나 인터럽트 관리, 기억장치 관리 등 역할 시스템 소프트웨어 개념 운영 체제 (Operation System) - HW와 SW 자원 관리하고 컴퓨터 P/G 위한 공통 서비스 제공하는 P/G 어셈블러 (Assembler) - 어셈블리어 --> 기계어로 변환해주는 P/G 컴파일러 (Compiler) - 고급언어로 작성한 원시 P/G을 기계어인 목적 P/G으로 바꾸어 주는 P/G 인터프리터 (Interpreter) - 고급 언어나 코드화된 중간 언어 입력받아 목적 P/G 생성 없이 직접 기계어 생성하여 실행시켜 주는 P/G 전처리기 (..

[정보처리기사 필기 요약] 프로그램 개발 언어 (객체지향, 선언형) [내부링크]

* 프로그램 개발 언어 - 프로그램 실행 방식에 따른 종류 구분 설명 컴파일러 언어 (Compiler) - 번역사 같은 작업 - P/G 전체 라인을 처음부터 끝까지 해독해 목적 코드로 만든 후 실행 - C, C++, COBOL, Ada, FORTRAN, PASCAL 등 인터프리터 언어 (Interpreter) - 통역사 같은 작업 - P/G 라인 단위로 한 줄씩 해석하고 바로 실행 - 자바스크립트, BASIC, LISP 등 스크립트 언어 - 소스 코드 컴파일 하지 않고도 실행 가능한 프로그래밍 언어 - 별도 컴파일 없이 내장된 번역기에 의해 번역되므로 바로 실행 가능 - 컴파일러 언어와는 다르게 인터프리터(interpreter) 사용해서 코드 한줄 한줄을 즉시 해석하고 실행 - 인터프리터 방식 언어를 보..

[정보처리기사 필기 요약] 배치 프로그램 [내부링크]

* 배치 프로그램 사용자와의 상호작용 없이 일련의 작업들을 작업 단위로 묶어 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄 처리하는 P/G * 배치 프로그램 필수 요소 요소 설명 대용량 데이터 - 대용량 데이터 처리 가능해야 함 자동화 - 심각한 오류 상황 외에는 사용자 개입 없이 동작해야 함 견고함 - 유효하지 않은 데이터나 로직 수행 경우에도 예외 처리 해서 비정상적인 동작 중단 발생하지 않아야 함 안정성 - 어떤 문제 생겼는지, 언제 발생했는지 등 추적 가능해야 함 성능 - 주어진 시간 내 처리 완료 가능해야 하고, 동시에 동작하고 있는 다른 어플리케이션 방해하지 않아야 함

[정보처리기사 필기 요약] 소프트웨어 개발 보안 [내부링크]

* SW 개발 보안 SW 개발 과정에서 개발자 실수, 논리적 오류 등으로 인해 SW에 내포될 수 있는 보안 약점 원인 보안 취약점 최소화하고 사이버 보안 위협에 대응할 수 있는 안전한 SW 개발하기 위한 일련의 보안 활동 * SW 개발 보안가이드 (시큐어 코딩) 유형 유형 설명 입력 데이터 검증 및 표현 - P/G 입력 값 대한 검증 누락 또는 부적절한 검증, 데이터 잘못된 형식 지정으로 인해 발생 가능한 보안 약점 ※ SQL 삽입, 자원 삽입, 크로스 사이트 스크립트(XSS) 등 26개 보안 기능 - 보안 기능(인증, 접근 제어, 기밀성, 암호화, 권한 관리 등) 적절하지 않게 구현할 경우 발생 가능한 보안 약점 ※ 부적절한 인가, 중요 정보 평문 저장(또는 전송) 등 24개 시간 및 상태 - 동시 또..

[정보처리기사 필기 요약] 취약점 [내부링크]

* 취약점(vulnerability) 공격자가 시스템 정보에 대한 안정성 낮추는데 사용되는 보안 약점 시스템 자체 결함, 공격자가 결함에 대한 접근 용이성, 공격자가 결함에 대해 공격할 가능성 * SW 보안 취약점 보안 사고는 한 가지 이상 취약점들의 조합 통해 더욱 빈번하게 발생 분류 취약점 설명 메모리 보안 침입 버퍼 오버플로 - 메모리 다루는 데 오류 발생하여 잘못된 동작 하는 P/G 취약점 - 컴퓨터 보안과 프로그래밍에서는 프로세스가 데이터를 버퍼에 저장할 때, 프로그래머가 지정한 곳 외에 저장 허상 포인터 (Dangling pointer) - 컴퓨터 프로그래밍에서 적절한 타입의 유효 객체 가리키고 있지 않은 포인터로 인함 Null Pointer 역참조 - Null로 설정된 변수 주소 값 참조 시..

[정보처리기사 필기 요약] 모듈화 (2) - 응집도 (Cohesion) [내부링크]

* 응집도(Cohesion) 정보 은닉의 확장된 개념 하나의 모듈이 하나의 기능 수행하는 집적도의 척도 모듈의 독립성 나타내는 개념으로 내부 구성원 간 연관도 의미 클래스 목적에 부합하는 같은 기능 함수들로 구성 함수의 개수가 상대적으로 적으며 오로지 자신이 할 수 있는 책임을 부여받음 하나의 함수에 많은 기능 부여하지 않고 다른 기능 가진 함수와 상호협력 높을수록 좋음 모듈 내부에 독립성 보장 위해 하나의 기능만을 구현하는 것 의미 * 응집도 단계 응집도 내용 기능적 응집도 (Functional Cohesion) - 모듈 내부 모든 기능이 단일한 목적 위해 수행 순차적 응집도 (Sequential Cohesion) - 모듈 내 한 활동으로부터 나온 출력 값을 다른 활동이 사용하는 경우 통신적 응집도 (..

[정보처리기사 필기 요약] 모듈화 (2) - 결합도 (Coupling) [내부링크]

* 결합도(Coupling) 모듈 내부가 아닌 모듈 간 연관도(모듈 간 상호의존성). SW 구조에서 모듈 간 관련성 측정하는 척도 서로 다른 상위 모듈에 의해 호출되어 연관성 없는 서로 다른 기능 수행 자료 전달이 인터페이스 통하므로 인터페이스 복잡성에 의존적 낮은 결합도는 복잡성 감소시킴 (loosely-coupled) 에러 발생 시 오류 전파되어 다른 오류 원인이 되는 리플 효과(Ripple Effect) 최소화 해야함 * 결합도 단계 결합도 내용 자료 결합도 (Data Coupling) - 모듈 간 인터페이스로 전달되는 파라미터 통해서만 모듈 상호 작용 발생 스탬프 결합도 (Stamp Coupling) - 모듈 간 인터페이스로 배열이나 오브젝트, 스트럭처 등 전달되는 경우 제어 결합도 (Contro..

[정보처리기사 필기 요약] 모듈화(1) [내부링크]

* 모듈화 P/G 구성요소 일부로 관련된 데이터와 함수들 묶여서 모듈 생성. 주로 파일 단위로 구성 * 모듈화 원리 구분 설명 분할과 지배 (Divide & Conquer) - 복잡한 문제를 분해, 모듈 단위로 문제 해결 정보 은닉 (information hiding) - 어렵거나 변경 가능성 있는 모듈을 타 모듈로부터 은닉 자료 추상화 (Data Abstraction) - 각 모듈 자료구조를 액세스하고 수정하는 함수 내 자료구조 표현 내역 감춤 모듈의 독립성 (Module Independence) - 독립성 강한 모듈은 낮은 결합도와 높은 응집도 특징 가짐 * 모듈화 측정 척도 : 모듈화는 공통 모듈 구현 위해 재사용성 강화를 위한 중요한 개념. 모듈은 내부 처리 요소 간 독립성 나타내며 응집도 높을수..

[정보처리기사 필기 요약] 재사용 [내부링크]

* 재사용 : 기존 SW 또는 SW 지식 재활용하여 새로운 SW 개발하는 활동 * 재사용 사례 SW 라이브러리 (Software Library) 코드 재사용의 매우 일반적인 예로서 라이브러리를 사용하는 것 라이브러리 코드 호출하여 작업 실행 가능 라이브러리 사용 단점 : 성능 향상이나 출력 형식 바꾸고자 할 때 세부사항 조절 불가하고, 라이브러리 취득하여 학습 및 설정에 시간과 비용이 든다는 점 디자인 패턴(Design Pattern) 비슷한 문제를 풀기 위한 범용적인 설계 해법. 개별 상황에 따라서 수정 가능 프레임워크 개발자는 일반적으로 타 응용 P/G 및 프레임워크 통해 공통 라이브러리 등 많은 SW 재사용. 개발 언어와 도메인에 따라 다름

[정보처리기사 필기 요약] 개발 환경 구축 및 형상 관리 [내부링크]

* 개발환경 구축 : 개발환경 구성 시 요구사항에 대한 명확한 이해를 바탕으로 이에 적합한 개발 도구 및 개발 환경 구축이 이루어져야 함. * 개발 도구 분류 구현 도구 Eclipse, Visual Studio Code, IntelliJ, NetBeans 등 테스트 도구 xUnit, Spring Test 등 형상 관리 도구 CVS, Subversion, Git 등 빌드 도구 Ant, Maven, Gradle 등 * 개발 도구 기능 개발 도구 기능 구현 도구 (Implementation Tool) - 코드 작성과 디버깅, 수정 작업이 가능하며 구현해야 할 SW가 어떤 프로그래밍 언어로 개발되는지에 따라 적합한 구현 도구 선택하여 사용 테스트 도구 (Test Tool) - 코드 기능 검증과 개발 품질 높이기..

[정보처리기사 필기 요약] 인덱스(INDEX) (3) [내부링크]

* 인덱스 스캔 방식 구분 내용 비고 Index Range Scan - 인덱스 루트 블록에서 리프 블록까지 수직적으로 탐색한 후 리프 블록을 필요한 범위만 스캔 Index Full Scan - 수직적 탐색 없이 인덱스 리프 블록을 처음부터 끝까지 수평적으로 탐색하는 방식. - 대게는 데이터 검색 위한 최적 인덱스 없을 때 차선으로 선택 Index Unique Scan - 수직적 탐색만으로 데이터 찾는 스캔 방식 - Unigue 인덱스를 '=' 조건으로 탐색하는 경우 동작 Index Skip Scan - 인덱스 선두 컬럼이 조건 절에 빠졌어도 인덱스 활용하는 스캔 방식 Index Fast Full Scan - Index Full Scan보다 빠른 스캔 방식 - 인덱스 트리 구조 무시하고 인덱스 세그먼트 전..

[정보처리기사 필기 요약] 인덱스(INDEX) (2) [내부링크]

* 해시 인덱스 데이터 신속한 검색 위해 키 값에 해시 함수 적용하여 주소 값 빠르게 계산하고 레코드 저장된 위치 직접 접근하는 방법 (키 값, 주소) 쌍으로 저장하므로 특정 키 값에 대한 검색 방법 중 가장 빠름 구분 설명 버킷(Bucket) - 동일한 해시 주소 갖는 레코드(키와 주소쌍)들이 저장될 메모리 블록 의미. - 버킷 크기에 따라 같은 해시 주소에 저장될 수 있는 레코드 수 결정 슬롯(Slot) - 1개의 해시 레코드 저장할 수 있는 공간 의미. n개의 슬롯이 모여 하나의 버킷을 이룸 충돌(Collision) - 해시 레코드 삽입 시 서로 다른 2개 이상의 데이터가 같은 해시 주소 갖는 현상 동거자(Synonyms) - 해시 함수가 같은 주소로 변환시키는 모든 레코드 오버플로우(Overflo..

[정보처리기사 필기 요약] 인덱스(INDEX) (1) [내부링크]

* 인덱스 데이터 빠르게 찾을 수 있는 수단 테이블에 대한 조회 속도 높여 주는 자료구조 테이블에서 자주 사용되는 컬럼 값 빠르게 검색 가능토록 색인 만들어 놓은 형태 과다한 인덱스 생성은 DB 공간 많이 차지하며 Table Full Scan보다 속도가 느려질 수 있음 테이블 데이터 삽입, 삭제, 변경 수행하는 DML 작업 시 성능 떨어짐 * 인덱스 구조와 장점 인덱스 구성 위해 가장 많이 사용하는 검색 트리 : B-Tree 구조 DB 성능 향상 위한 DB 튜닝 수단으로 가장 일반적인 방법 장점 데이터 검색 위한 SQL 구문 변경 않아도 검색 성능 개선 데이터 검색하기 위한 별도 객체로서 테이블 데이터에 영향 주지 않음 * 인덱스 사용 테이블의 특정 레코드 위치 알려주는 용도로 사용. 이러한 인덱스는 자..

[정보처리기사 필기 요약] 뷰(View) [내부링크]

* 뷰(View) 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 테이블로부터 유도된 이름을 가지는 가상 테이블 기본 테이블처럼 행과 열로 구성되지만 다른 테이블에 있는 데이터를 보여줄 뿐이지 데이터를 직접 담고 있지 않음 아래 그림에서 '테이블 A'와 '테이블 B'는 물리 테이블 의미, '뷰C'는 두 개 테이블을 이용하여 생성한 뷰 의미 * 뷰 특징 저장 장치 내 물리적으로 존재하지 않음 (가상 테이블) 데이터 보정 등 임시적인 작업 위한 용도로 사용 기본 테이블과 같은 형태 구조로 조작이 거의 비슷 삽입, 삭제, 갱신에 제약 따름 논리적 독립성 제공 독자적 인덱스 가질 수 없음 Create View 시스템 권한 이용하여 뷰 생성 데이터 선택적으로 뷰 이용하여 처리 * 뷰 사용 SELECT * F..

[정보처리기사 필기 요약] 미들웨어 솔루션 [내부링크]

* 미들웨어 솔루션 기능적으로 클라이언트와 서버 사이 통신 담당하는 시스템 SW 컴퓨터와 컴퓨터 연결 담당하는 SW로 중간을 의미하는 미들과 SW를 의미하는 웨어의 합성어 유형 설명 및 활용 DB - DB 제품 제작업체에서 제공하는 클라이언트와 DB 연결하기 위한 MW RPC (Remote Precedure Call) - 응용 P/G 프로시저 사용하여 원격 프로시저를 로컬 프로시저처럼 호출하는 방식 MW MOM (Message Oriented Middleware) - 메시지 기반 비동기형 메시지 전달 방식 MW - 서로 다른 이기종 분산 데이터 시스템의 데이터 동기 위하여 주로 사용 TP - 모니터 - 온라인 업무에서 트랜잭션 처리, 감시하는 MW - 사용자 수가 증가해도 빠른 응답 속도 유지해야 하는 ..

[정보처리기사 필기 요약] 데이터 명세화 [내부링크]

* 데이터 명세화 : 인터페이스 요구 사항 분석 과정에서 식별한 연계 정보에 해당하는 테이블 정의서, 파일 레이아웃(정의서), 코드 정의서 등 통해 데이터 명세화 ① 개체(Entity) 정의서 DB 개념 모델링 단계에서 도출한 개체 타입과 관련 속성, 식별자 등 정보를 개괄적으로 명세화한 정의서 ② 테이블(Table) 정의서 논리 및 물리 모델링 과정에서 작성하는 설계 산출물 테이블 구성하는 컬럼들 특성, 인덱스(Index), 업무 규칙 문서화 컬럼 특성은 컬럼명, 데이터 타입, 길이, Null 여부, 키 여부, 디폴트 값 등 의미 ③ 코드 정의서 코드에 대한 명명규칙 정하고, 명명규칙에 따라 어떤 코드 사용할지 정의한 문서 코드는 전체 DB에서 유일(Unique)하게 정의 * 송/수신 데이터 명세서 송..

[정보처리기사 필기 요약] 내외부 송/수신 [내부링크]

* 내외부 송/수신 연계 방식 1. 직접 연계 방식 일반적으로 중간의 연계 매개체가 생략되어 연계 처리 속도 빠르고 구현 단순하며 개발 비용과 기간 짧음 송/수신 시스템 사이 결합도 높아 시스템 변경에 민감 보안 위한 암/복호화 처리와 업무 기능 구현을 인터페이스 별로 작성하여 전사 차원 시스템 인터페이스 통합 환경 구축 어려움 2. 간접 연계 방식 연계 서버 활용하여 송/수신 처리와 송/수신 현황 모니터링하고 통제하는 방식 서로 상이한 네트워크와 프로토콜 등 다양한 환경 시스템들 연계하고 통합 관리 가능 장점 : 인터페이스 변경 시에도 유연하게 대처 가능하고 보안이나 업무처리 로직 반영 용이 단점 : 인터페이스 아키텍처와 연계 절차 복잡하고 연계 서버로 인한 성능 저하, 개발 및 테스트 기간이 직접 연..

[정보처리기사 필기 요약] 시스템 아키텍처 [내부링크]

* 시스템 아키텍처 : 시스템이 어떻게 작동하는지를 설명하는 프레임워크. 시스템 목적 달성 위해 시스템의 각 컴포넌트가 무엇이며 어떻게 상호작용하는지, 정보가 어떻게 교환되는지 설명 * 시스템 아키텍처 설계 SW 개발에서는 다양한 수준의 설계 작업 존재. ①SW 시스템 아키텍처 설계에 제약을 주는 상위 설계로서의 ②시스템 아키텍처 설계가 있고, SW 아키텍처 제약 안에서 세부적인 설계 작업을 수행하게 되는 ③SW 상세 설계 있음 이들 세 가지 설계는 일반적인 설계 활동의 하나로서 설계가 갖는 일반적인 특성을 공통적으로 가짐 시스템 아키텍처는 HW와 SW로 구성된 시스템 아키텍처 지칭하며 SW 아키텍처 결정 제약하게 되고, SW 아키텍처 설계는 SW 상세 설계 결정을 제약하는 각기 다른 수준의 설계 의미 ..

[정보처리기사 필기 요약] 클래스 설계 - 협약에 의한 설계 (Design by Contract) [내부링크]

* 협약에 의한 설계 (Design by Contract) : 클래스의 명확한 인터페이스 명세 위해서 선행 조건, 결과 조건, 불변 조건 기술하는 설계 방법 종류 설명 선행 조건 (precondition) - 클래스 인터페이스 호출하기 전 사용자가 만족시켜야 하는 제약조건 기술 결과 조건 (postcondition) - 클래스 인터페이스 통해 연산 수행된 후에 만족시켜야 하는 조건 기술 불변 조건 (invariant) - 클래스 내부에서 수행되는 동안 항상 만족해야 하는 조건 기술

[정보처리기사 필기 요약] 객체 지향 분석 방법론 [내부링크]

* 객체지향 분석 방법론 1. 럼바우(Runbaugh) 방법론 (OMT, Object Modeling Technique) 가장 일반적으로 사용되는 방법 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어 수행하는 방법 모든 SW 구성 요소를 그래픽 표기법으로 활용하여 모델링하여 시스템 개발의 전 단계가 추상화, 캡슐화, 상속성 등 일관된 객체 지향 개념이 적용되는 객체 지향 개발 방법. 분석 절차 : 객체 모델링 --> 동적 모델링 --> 기능 모델링 순으로 진행 순서 분석 활동 내용 1 객체 모델링 (Object Modeling) - 정보 모델링. 시스템에서 요구되는 객체 찾아내 속성과 연산 식별 및 객체들 간 관계 규정하여 그래픽 다이어그램으로 표시 - 실세계 문제 영역으로부터 객체와 클래스 추..

[정보처리기사 필기 요약] 디자인 패턴(3) - 행위패턴 [내부링크]

* 행위패턴 (Behavioral Pattern) : 객체 간 기능 분배하는 일과 같은 로직 수행에 주로 이용하여 객체 간 연동에 대한 유형 제공 종류 개념 Template method - 상위 클래스에서 처리 흐름 정하고 하위 클래스에서 구체적인 내용 재정의 Interpreter - 간단한 언어 문법 정의하는 방법과 그 언어로 문장 구성하는 방법, 문장 해석하는 방법 제시 Iterator - 집합 객체 요소들 내부 표현 방식 공개 않고 순차적으로 접근하는 구조 제공 Command - 요청 자체를 객체화(캡슐화)하고 매개변수(파라미터) 추가하여 여러 가지 요구사항 추가 가능(로그기록, 작업 취소 지원) Chain of Resposibility - 요청 처리 가능한 기회를 하나 이상 객체에 부여함으로써 객..

[정보처리기사 필기 요약] 디자인 패턴(2) - 구조패턴 [내부링크]

* 구조패턴(Structural Pattern) : 다른 기능을 가진 객체 간 협력 필요할 때 객체들을 조직화 하는 방법과 기능 구현하기 위해 객체 구성하는 방식 제공 종류 개념 Adaptor - 클래스 재사용성 높이기 위해 클래스 간 기능 변환 제공하여 호환성 확보 Bridge - 인터페이스(API)가 서로 다른 클래스 연결하는 패턴. 기능의 계층과 구현의 계층 연결 Composite - 복잡한 객체 구조 표현하여 객체 집합 속에 또 다른 객체 집합 가짐 Decorator - 새로운 기능 추가될 때마다 새로운 객체 내부에서도 그대로 유지, 보장해줌 Facade - 서브 시스템 복잡할 경우 간단한 인터페이스 통해 서브시스템 주요 기능 사용 가능 Fly weight - 인스턴스 가능한 한 공유시켜 불필요한..

[정보처리기사 필기 요약] 디자인 패턴(1) - 생성패턴 [내부링크]

* 디자인 패턴 구성 패턴 이름 및 유형 설계 의도를 표현하며 한 두 단어로 설계 문제와 해법 서술 문제 및 배경 해결해야할 문제와 그 배경 설명하며 언제 패턴 사용하는지 서술 해결 설계 구성 요소와 그 요소들 간 관계, 책임, 협력관계 서술 사례 간단한 적용 사례 서술 결과 디자인 패턴 적용해서 얻는 결과와 장단점 서술 샘플코드 패턴이 적용된 원시 코드 기술 * GoF(Gang of Four) 디자인 패턴 목적 생성 패턴 구조 패턴 행위 패턴 암기 FSABP ABCD2FP T2I2C2S2MVO 의미 객체 생성방식 결정 객체 조직화 객체 행위를 조직, 관리, 연합 범위 클래스 Factory method Adapter Template method Interpereter 객체 Singleton Abstrac..

[정보처리기사 필기 요약] 객체지향 설계원칙 (SOLID) [내부링크]

구분 내용 단일 책임 원칙 (SRP, Single Responsibility Principle) - 객체는 단 하나의 책임만을 가져야 함 - 어떤 클래스를 변경해야 하는 이유는 단 한 가지여야 함(책임 = 변경사유) - 같은 이유로 변화하는 것 끼리 묶고, 다른 이유로 변화하는 것 끼리는 분리 - 산탄총 수술 : 하나의 책임이 여러 클래스로 분산되어 있는 경우 발생 가능 개방 폐쇄 원칙 (OCP, Open-Closed Principle) - 기존 코드 변경하지 않으면서 기능 추가할 수 있도록 설계 되어야 함 - SW 개체(Classes, Modules, Functions 등) 확장에는 열려있고 수정 시에는 닫혀있어야 함 --> 추상화 - 클래스 변경하지 않고도 그 클래스 둘러싼 환경 변경할 수 있는 설계..

[정보처리기사 필기 요약] 객체지향 [내부링크]

* 객체지향 개념 : 실세계 개체(Entity)를 속성(Attribute)과 메소드(Method)가 결합된 형태의 객체(Object)로 표현하는 개념. 구현 대상을 하나의 객체로 보고 객체와 객체들 간 관계로 모델링 하는 방법 * 구성요소 구분 내용 클래스 (Class) - 같은 종류 객체들 집합에 공통 속성과 행위 정의 - 객체지향 P/G 기본적인 사용자 정의 데이터형 객체 (Object) - 클래스 인스턴스 (실제로 메모리 상에 할당된 것) - 자신 고유 데이터 가지며 클래스에서 정의한 행위 수행 속성 (Attribute) - 객체 데이터 메소드 (Method) - 객체 행위 (함수, 메소드) - 클래스로부터 생성된 객체 사용하는 방법 메시지 (Messsage) - 객체 간 통신 * 기법 특징 상세내..

[정보처리기사 필기 요약] 코드의 기능 [내부링크]

구분 설명 표준화 다양한 종류 데이터를 일정한 기준으로 통일하여 관리 간소화 데이터 간략하게 표현 가능 분류 데이터 분류 쉽게 가능 식별 대량 데이터들에서 서로 구분 가능하고 쉽게 식별 가능 배열 데이터 정의한 순서대로 나열 가능 연상 정보 표현하고자 하는 데이터 뜻과 의미가 코드에 내포되게 표현 가능 암호화 데이터 외부 표현 감추고자 암호화 가능 오류 검출 데이터 입/출력 시 잘못된 정보 검출 가능

[정보처리기사 필기 요약] SW 아키텍처 4+1 View [내부링크]

* 시스템의 여러 가지 측면 고려하기 위한 다양한 관점 바탕으로 정의. UML 4+1 View가 표준. * 고객 요구사항 중심으로 4가지 관점으로 SW 아키텍처 설계하는 기법 * SW 아키텍처 4+1 View 구성 구분 설명 사용사례관점 (Use Case View) - 시스템 외부 사용자 관점에서 사용 사례들 간 관계 정의 논리 관점 (Logical View) - 상위 수준에서 시스템 논리적인 구조/행위를 클래스 인터페이스, 협력관계(Collaboration)로 정의 구현 관점 (Implementation View) - 독립적으로 실행되는 컴포넌트와 이들 간 관계 정의 프로세스 관점 (Process View) - 시스템 병렬처리 및 동기화 처리 위한 스레드와 프로세스 정의 배치 관점 (Deployment..

[ANDROID] Activity View 구하기 [내부링크]

1. id를 이용하여 구하기 setContentView(R.layout.activity_main,null); View view = findViewById(R.id.layout); 2. View 객체에 담기 View view = getLayoutInflater().from(this).inflate(R.layout.activity_main,null); setContentView(view);

[ANDROID] byte array rotate [내부링크]

앱을 landscape로 실행시켰더니 카메라도 같이 돌아가버렸다... camera.setDisplayOrientation(90); 위와 같이 설정을 해도 보이는 화면만 돌아가있지 막상 bitmap을 찍어서 보면 적용이 안되어있어서 골머리를 썩히다가 방법을 찾았다 ! 카메라 onPreviewFrame에서 들어오는 byte array 데이터를 돌리면 된다 ! public static byte[] rotateNV21(byte[] input, int width, int height, int rotation) { byte[] output = new byte[input.length]; try { if (rotation == 0) { System.arraycopy(input, 0, output, 0, input.le..

[ANDROID] react-native 설치 & 프로젝트 생성 [내부링크]

cmd 창을 열어서 nodeJS가 설치되어있는지 확인해보기. 설치가 되어있지 않다면 따로 설치하고 시작하기 바람 >node --version v12.16.2 다음과 같이 [ npm install -g react-native-cli ] 명령어를 실행해준다. -g : global. 전역 범위에서 설치, 사용 하겠다는 의미 >npm install -g react-native-cli ...\AppData\Roaming\npm\react-native -> ...\AppData\Roaming\npm\node_modules\react-native-cli\i ndex.js + [email protected] added 79 packages from 28 contributors in 3.189s npm으로 설치..

[ANDROID] onKeyDown KeyEvent 변경 [내부링크]

작업을 하다가 화면을 90도 회전해서 처리해야하는 작업들이 생겼다. 리모콘에서 상하좌우 key event도 90도 회전시킨 evnet로 처리해야 하는데 방법을 몰라 몇시간을 헤맸다. public boolean onKeyDown(final int keyCode, final KeyEvent event) 에서 다음과 같이 처리를 해줬다. if(keyCode == KeyEvent.KEYCODE_DPAD_LEFT) { new Thread(new Runnable() { @Override public void run() { try { inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_UP); } catch (Exception e) {} } }).start(); return true; }..

장고 프로젝트 생성 [내부링크]

$ django-admin startproject mysite mysite/ manage.py mysite/ __init__.py settings.py urls.py asgi.py wsgi.py 이 파일들은, The outer mysite/ root directory is a container for your project. Its name doesn’t matter to Django; you can rename it to anything you like. manage.py: Django 프로젝트와 다양한 방법으로 상호작용 하는 커맨드라인의 유틸리티 입니다. manage.py 에 대한 자세한 정보는 django-admin and manage.py 에서 확인할 수 있습니다. mysite/ 디렉토리 내부에는..

python3.9 ubuntu 18.04에 설치 [내부링크]

1. sudo add-apt-repository ppa:deadsnakes/ppa 2. sudo apt update 3. apt install python3.9 패키지 목록을 읽는 중입니다... 완료 의존성 트리를 만드는 중입니다 상태 정보를 읽는 중입니다... 완료 다음의 추가 패키지가 설치될 것입니다 : libpython3.9-minimal libpython3.9-stdlib python3.9-minimal 제안하는 패키지: python3.9-venv python3.9-doc binfmt-support 다음 새 패키지를 설치할 것입니다: libpython3.9-minimal libpython3.9-stdlib python3.9 python3.9-minimal 0개 업그레이드, 4개 새로 설치, 0개 ..

[정보처리기사 필기 요약] (01-01/01~02) 소프트웨어 설계 - 요구 사항 확인 [내부링크]

PART 01. 소프트웨어 설계 - CHAPTER 01. 요구사항 확인 (NCS 5 level) "요구사항 확인"이란? 업무 분석가가 수집/분석/정의한 요구사항과 이에 따른 분석모델에 대해서 확인과 현행 시스템에 대해 분석하는 능력 현행 시스템 분석하기 개발하고자 하는 응용SW에 대한 이해를 높이기 위해, 현행 시스템의 적용현황을 파악함으로써 개발범위와 향후 개발될 시스템으로의 이행방향성 분석 가능. 개발하고자 하는 응용SW와 관련된 OS, DB, 관리시스템, MW 등의 요구사항 식별 가능. 현행 시스템을 분석하여, 개발하고자 하는 응용SW가 이후 적용될 목표 시스템을 명확하고 구체적으로 기술 가능. ▷ 1단계 : 현행 시스템 파악 1. 구성/기능/인터페이스 파악 시스템 구성 현황 파악 시스템 기..

[ANDROID] StringBuffer 비우기 [내부링크]

StringBuffer를 사용하던 중, 버퍼를 비우고 새로 쓰고 싶어서 방법을 찾아보았다. 1. null 값을 넣고 새로 객체 생성하기 StringBuffer strbuffer = new StringBuffer(); strbuffer.append("test"); strbuffer = null; strbuffer = new StringBuffer("test2"); 2. length를 0으로 초기화하기 StringBuffer strbuffer = new StringBuffer(); strbuffer.append("test"); strbuffer.setLength(0); strbuffer.append("test2");

[ANDROID] byte array 초기화 [내부링크]

byte array를 초기화 하는 방법을 찾아보았다. Arrays.fill(buffer, (byte)0); byte 배열에 데이터를 쓰고, 초기화를 안해주고 다시 그 배열에 데이터를 쓰니까 그 전에 있던 내용이 지워지지 않고 남아있었다. 위의 코드로 초기화를 해주니 해결됨 !

[ANDROID] java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() [내부링크]

앱을 실행하던 도중 다음과 같은 에러가 떴다. E AndroidRuntime: FATAL EXCEPTION: Thread-2656 E AndroidRuntime: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() E AndroidRuntime: at android.os.Handler.(Handler.java:204) E AndroidRuntime: at android.os.Handler.(Handler.java:118) E AndroidRuntime: at android.app.Dialog.(Dialog.java:123) E AndroidRuntime: at android.ap..

[ANDROID] byteArray to String [내부링크]

파일에서 byte array로 글을 읽어와야 하는 부분이 있다. String으로 변환해서 출력을 하고 싶어 방법을 찾아봤더니 생각보다 간단했다. new String(byteArray, StandardCharsets.UTF_8); 위와 같이 String 객체로 변환해주면 된다!

[ANDROID] custom toast 커스텀 토스트 [내부링크]

토스트를 사용하던 중에 배경이 회색인게 마음에 안들어서 커스텀 토스트를 만들어 보았다. res/layout/toast_custom.xml res/drawable/custom_bg.xml 위의 코드처럼 layout을 꾸며보았다. 그러면 다음과 같이 나온다 ! java 코드는 다음처럼 작성하면 끝 ! private TextView toast_msg; private Toast toast; //------------------------------------- LayoutInflater inflater = getLayoutInflater(); View layout = inflater.inflate(R.layout.toast_custom, (ViewGroup) findViewById(R.id.custom_toas..

[ANDROID] Dialog 밖의 어두운 배경 없애기 [내부링크]

dialog를 생성 후 띄우면 dialog를 제외한 나머지 배경은 어둡게 변한다... 나는 어두운 배경으로 변하는게 싫어 없애는 방법을 찾았다. dialog = builder.create(); dialog.getWindow().setDimAmount(0); // background remove dialog.show(); 다음과 같이 dialog.getWindow().setDimAmount(0); 를 추가해주면 !!! 배경이 어둡게 변하지 않는다 !!!

[ANDROID] java.lang.IllegalArgumentException: Comparison method violates its general contract! [내부링크]

앱을 실행시켜놓고 아침에 와서 봤더니 다음과 같은 에러가 나고 제대로 실행이 안되고 있었다... FATAL EXCEPTION: inference java.lang.IllegalArgumentException: Comparison method violates its general contract! at java.util.TimSort.mergeLo(TimSort.java:777) at java.util.TimSort.mergeAt(TimSort.java:514) at java.util.TimSort.mergeCollapse(TimSort.java:441) at java.util.TimSort.sort(TimSort.java:245) at java.util.Arrays.sort(Arrays.java:1498..

[ANDROID] 두 점의 각도 구하기 [내부링크]

두 점의 각도 구하는 방법 public static double angleOf(PointF p1, PointF p2) { // NOTE: Remember that most math has the Y axis as positive above the X. // However, for screens we have Y as positive below. For this reason, // the Y values are inverted to get the expected results. final double deltaY = (p1.y - p2.y); final double deltaX = (p2.x - p1.x); final double result = Math.toDegrees(Math.atan2(deltaY,..

[ANDROID] base64 string 변환 [내부링크]

public static String getBase64String(Bitmap bitmap) { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream); byte[] imageBytes = byteArrayOutputStream.toByteArray(); return Base64.encodeToString(imageBytes, Base64.NO_WRAP); } String encoded = android.util.Base64.encodeToString(bytes, android.util.Base64...

[ANDROID] drawable 파일 bitmap 변환 [내부링크]

public static Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = null; try { if (drawable instanceof BitmapDrawable) { BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; if (bitmapDrawable.getBitmap() != null) { return bitmapDrawable.getBitmap(); } } if (drawable.getIntrinsicWidth()

[ANDROID] dp 값 px 변환 [내부링크]

public static float dipToPixels(Context context, float dipValue) { DisplayMetrics metrics = context.getResources().getDisplayMetrics(); return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, metrics); }

[ANDROID] bitmap byte array 변환 [내부링크]

public static byte[] bitmapToByteArray( Bitmap bitmap ) { ByteArrayOutputStream stream = new ByteArrayOutputStream() ; bitmap.compress( Bitmap.CompressFormat.PNG, 100, stream) ; byte[] byteArray = stream.toByteArray() ; return byteArray ; } public static Bitmap byteArrayToBitmap(byte[] bytearr) { return BitmapFactory.decodeByteArray(bytearr, 0, bytearr.length); }

[NODEJS] pm2 설치 및 사용 [내부링크]

0. 설치 npm install pm2 -g pm2 install pm2-logrotate pm2 set pm2-logrotate:compress true 1. 프로세스 체크 pm2 list | grep main | grep online pm2-logrotate 세팅 pm2 set pm2-logrotate:compress true 2. 프로세스 시작 및 로그 저장 pm2 start /home/app/main.js -o /home/contents/log/main_out.log -l /home/contents/log/main_log.log 3. 종료 pm2 kill 4. 테스트 용도 세팅 pm2 set pm2-logrotate:rotateInterval '*/1 * * * *'

[MARIADB] 설치 [내부링크]

[MARIA DB] apt install mariadb-server apt install libmariadbclient-dev >> libmariadbclient.so 파일이 생성이 되어야함. ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock * 유저 생성 및 권한 sudo mariadb -u root use mysql; create user 'root'@'%' identified by 'root'; grant all privileges on *.* to 'root'@'%' identified by 'root'; FLUSH PRIVILEGES; * 권한 sudo mariadb -u root use mysql; grant all privileges on *.* to ..

[꿀팁] 메모리 확인 [내부링크]

while true; do cat /proc/{프로세스ID}/status | grep VmRSS; sleep 1; done 명령어를 치면 1초마다 메모리 확인 가능. 디버깅 시 유용.

[GOLANG] 공부 (4) [내부링크]

s라는 문자열 내에서 각각의 "단어"의 등장 횟수를 나타내는 맵 반환 함수 import "strings" func WordCount(s string) map[string]int { wordString := make(map[string]int) for _,word := range strings.Fields(s) { wordString[word]++ } return wordString } *스위치 (Switch) - case의 코드 실행을 마치면 알아서 break 함 > fallthrough로 끝나는 case는 스스로 break를 하지 않음. switch os := runtime.GOOS; os { case "darwin": fmt.Println("OS X.") case "linux": fmt.Print..

[GOLANG] 공부 (3) [내부링크]

- import 패키지 > 패키지 이름은 디렉토리 경로의 마지막 이름을 사용. - import (pkg1, pkg2, ...) || import "pkg1" import "pkg2" - 첫 문자가 대문자로 시작 > 패키지를 사용하는 곳에서 접근 가능한 exported name math.pi : cannot refer to unexported name math.pi mathPi : 3.141592653589793 *함수 - 매개변수 타입은 변수명 뒤에 명시 - x int, y int > x, y int - 하나의 함수는 여러 개의 결과 반환 가능 - 반환 값에 이름을 부여하면 변수처럼 사용 가능, 반환 값을 지정하지 않고 return해도 알아서 반환 package main import "fmt" func ..

[GOLANG] 공부 (2) [내부링크]

* reflection : 실행 시점(runtime)에 인터페이스나 구조체 등의 타입 정보를 얻어내거나 결정하는 기능 - reflect.TypeOf(변수명이나 구조체명) > Name(), Size(), Kind() / 구조체 : FieldByName(필드명), FieldByName(필드명).Get(태그명) - reflect.ValueOf(변수명이나 구조체명) > Type(), Kind(), Float() ... - reflect.ValueOf(변수명이나 구조체명) > 포인터 : Elem(), Elem().Int() (값을 다시 얻어와 타입에 맞게 가져옴) // 인터페이스 : Int() (바로 가져옴) * reflection을 사용하여 동적으로 함수 생성 방법 > 타입별로 함수 구현 방지 var hello..

[GOLANG] 공부 (1) [내부링크]

* 클로저를 고루틴으로 실행할 때 반복문에 의해 바뀌는 변수는 반드시 매개변수로 넘겨줌 ! > 고루틴은 반복문이 완전히 끝난 다음에 생성됨 * 채널은 값을 주고 받는 동시에 동기화 역할까지 수행 * 동기 채널은 보내는 쪽에서는 값을 받을 때까지 대기하고, 받는 쪽에서는 채널에 값이 들어올 때까지 대기함 > 동기 채널을 활용하면 고루틴의 코드 실행 순서 제어 가능 * 채널에 버퍼를 1개 이상 설정하면 비동기 채널이 생성됨 (asynchronous channel) done := make(chan bool, 2) //버퍼가 2개인 비동기 채널 생성 * 비동기 채널은 보내는 쪽에서 버퍼가 가득 차면 실행을 멈추고 대기하며 받는 쪽에서는 버퍼에 값이 없으면 대기; * 비동기 채널을 사용할 때는 실행 순서나 채널 ..

[ANDROID] camera preview frame byte array to bitmap [내부링크]

public void onPreviewFrame(final byte[] bytes, final Camera camera); 위의 onPreviewFrame에서 byte array 데이터를 bitmap 으로 변환하는 방법은 Camera.Parameters parameters = camera.getParameters(); YuvImage yuv = new YuvImage(bytes, parameters.getPreviewFormat(), APP_PREVIEW_WIDTH, APP_PREVIEW_HEIGHT, null); ByteArrayOutputStream out = new ByteArrayOutputStream(); yuv.compressToJpeg(new Rect(0, 0, APP_PREVIEW_WIDT..

[ANDROID] Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug' [내부링크]

Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug' implementation 'com.github.PhilJay:MpAndroidChart:v3.1.0' 를 불러와 쓰려고 했더니, 빌드 시 다음과 같은 에러가 떴다... 검색해 본 결과, app > build.gradle에 아래와 같이 추가해주면 빌드 성공 ! android { packagingOptions { exclude 'META-INF/proguard/androidx-annotations.pro' } }

[ANDROID] Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $ [내부링크]

release apk 시, 위와 같은 에러가 뜨면서 apk가 만들어 지지 않음 build APK 후 generate signed apk 를 해주었더니 그제서야 apk 생성

[JAVA/Android] JNI proguard 난독화 [내부링크]

buildTypes { release { minifyEnabled true signingConfig signingConfigs.release proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } 프로가드 활성화해서 apk파일을 만들고, 앱을 실행시키는 과정에서 JNI DETECTED ERROR IN APPLICATION: JNI GetJavaVM called with pending exception java.lang.NoSuchMethodError: no non-static mdethod ~~~ 라는 JNI 관련 에러가 뜨면서 앱이 죽는다.. 해결방법은 -keep public class TestClass..

[JAVA] 소수점 반올림 [내부링크]

double n = 1.23456; System.out.println(Math.round(n)); // result : 1 double n = 1.23456; System.out.println(Math.round(n * 10)/10); // result : 1.2 double n = 1.23456; System.out.println(Math.round(n * 100)/100); // result : 1.23 double n = 1.23456; System.out.println(Math.round(n * 10000)/10000); // result : 1.2346

[JAVA] list 내 원소 내림차순 정렬 [내부링크]

public static class Descending implements Comparator { @Override public int compare(Float o1, Float o2) { return o2.compareTo(o1); } } Descending descending = new Descending(); Collections.sort(_arr, descending); ArrayList인 _arr의 원소들을 Log로 찍어보면 내림차순으로 정렬되어 있음.!

[NodeJS/MQTT] MQTT SERVER로 파일 전송하기 [내부링크]

확실한 방법은 아니지만, 우선 적어두겠다.! client에서 server로 파일을 전송할 일이 있어서 검색한 결과 아래와 같이 하면 된다고 한다. 정말 되는지 확인한 후에 다시 글 수정을 하겠다.! MQTT.pub('my/topic', File.read('a.json'));

[NodeJS/MQTT] MaxListenersExceededWarning 해결 방안 [내부링크]

MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 close listeners added. Use emitter.setMaxListeners() to increase limit. 서버와 MQTT 통신을 하던 도중 메시지를 주고받다 보면 위와 같은 경고가 뜨고 프로세스가 죽게 된다. 처음에 그래서 client.setMaxListeners(100)으로 제한을 줬지만 100번 돌고 다시 저 경고가 뜬 후 죽었다. client.setMaxListeners(0)으로 주면 제한이 없다고 했었지만 그래도 죽었다. 한참을 헤맨 후 알게 된 사실이 프로그램을 실행하면 루프를 돌 때마다 계속 connect를 해준다는 사실이다. 내가 바보..

[KALDI] kaldi와 zeroth(1) [내부링크]

안드로이드가 주 분야였던 나는 딥러닝에 관심 1도 없었다. 허나, 어쩔 수 없는 상황때문에 kaldi 설치 및 사용을 하게 되었다. 여러 분야를 배움으로써 성장할 수 있는 기회이니.. 좋은 마음으로 이러한 상황을 받아들이기로 했다. 한국어가 필요해 알아보던 중, kaldi에 zeroth_korean이라는 한국어 음성인식 프로젝트가 포함되어 있다는 것을 알게 되었고, kaldi 내에 있는 예제로는 실행이 불가해 zeroth (https://github.com/goodatlas/zeroth) 에서 직접 git으로 다운받아서 설치하였다. 나는 멍청하게도 3일동안 여러 시행착오를 겪으며 kaldi 내에 있는 예제로 설치 및 실행을 하다가 ㅎㅎㅎ zeroth에서 직접 다운받아야 한다는 것을 깨달았다 ^^ 허허 신..

[Deep Learning] 음성인식(1) [내부링크]

소리 : 음성 + 음향 음성 : 음소의 합. 사람이 조음 기관을 사용하여 뜻을 전달하기 위해 의도적으로 만들어낸 소리 ex) 대본에 적혀 있는 대사의 뜻과 의도를 배우가 이해하여 소리로 표현하고(음성 발현) 이를 관객이 받아들이는 과정(음성 수용) ▷ 음소 문자 : 음소 하나하나가 문자의 자음이나 모음에 대응하는 문자와 그 체계 ※ 특히 한글은 음절을 초성, 중성, 종성으로 구분함. 모음인 중성은 반드시 존재해야 하고, 초성이나 중성은 자음으로 존재하거나 없어도 음절과 단어를 구성할 수 있음. ▷ 음소 배열론 : 자음과 모음의 결합으로 소리가 결합되어 단어를 이루는 규칙을 다룸. ▷ 음절 : 초성, 중성, 종성의 자음과 모음을 조합하는 구조. 조합된 한 글자는 하나의 음절을 생성. ※ 단어 : 한 개..

[QT] qlistview 클릭 시 포커스 제거 [내부링크]

한참을 헤맸다. qlistview 구현 후 클릭 시 클릭한 item에 하이라이트 강조가 된다. QStandardItem *iten = new QStandardItem(); item->setIcon(QIcon(QPixmap::fromImage(img))); QList m_listItem appendColumn(m_listItem); QListView *m_listview; m_listview->setModel(model); 처음엔 이렇게 리스트뷰를 구현했다. 하지만 stylesheet를 설정해도 적용이 되질 않아서 열심히 구글링을 하다가 방법을 찾았다. item->setIcon(QIcon(QPixmap::fromImage(img))); 대신에 QIcon icon; icon.addPixmap(QPixmap:..