cording-cossk3의 등록된 링크

키자드에 등록된 총 215개의 포스트를 확인하실 수 있습니다.

Tistory

[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..

Tistory

[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..

Tistory

[SWIFT] WKWebView

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

Tistory

[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)

Tistory

[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

Tistory

[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..

Tistory

[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..

Tistory

[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..

Tistory

[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..

Tistory

[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를 사용하여 해당 변수를 관찰 가능한 변수로 만든다. (앞의 값을..

Tistory

[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()); 다음 화면으로 이동. 단, 이전 경로를 모두 취소하는 경우 (..

Tistory

[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..

Tistory

[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..

Tistory

[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..

Tistory

[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는 같은..

Tistory

[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: [..

Tistory

[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..

Tistory

[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 = '..

Tistory

[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..

Tistory

[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..

Tistory

[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..

Tistory

[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..

Tistory

[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..

Tistory

[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...

Tistory

[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

Tistory

[Flutter] wifi connect 정보

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

Tistory

[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..

Tistory

[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..

Tistory

[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..

Tistory

[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..

Tistory

[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..

Tistory

[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 ..

Tistory

[Flutter] IOS 앱 구동 (2)

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

Tistory

[Flutter] Flutter App (4)

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

Tistory

[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 : 세로로 레이아..

Tistory

[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. ..

Tistory

[Deep Learning] jupyter notebook 설치

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

Tistory

[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..

Tistory

[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 ..

Tistory

[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..

Tistory

[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..

Tistory

[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, ..

Tistory

[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(); } /..

Tistory

[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..

Tistory

[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("===================..

Tistory

[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..

Tistory

[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..

Tistory

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

* 시스템 소프트웨어 사용자가 하드디스크에 있는 파일 조작 시 사용자가 직접 처리 않고 이를 대신 처리하는 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 전처리기 (..

Tistory

[Flutter] flutter 윈도우 설치

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

Tistory

[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..

Tistory

[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..

Tistory

[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 =>..

Tistory

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

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

Tistory

[정보처리기사 필기 요약] 취약점

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

Tistory

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

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

Tistory

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

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

Tistory

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

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

Tistory

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

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

Tistory

[정보처리기사 필기 요약] 재사용

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

Tistory

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

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

Tistory

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

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

Tistory

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

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

Tistory

[정보처리기사 필기 요약] 뷰(View)

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

Tistory

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

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

Tistory

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

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

Tistory

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

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

Tistory

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

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

Tistory

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

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

Tistory

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

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

Tistory

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

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

Tistory

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

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

Tistory

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

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

Tistory

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

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

Tistory

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

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

Tistory

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

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

Tistory

[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..

Tistory

[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);

Tistory

[정보처리기사 필기 요약] 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..

Tistory

[정보처리기사 필기 요약] 코드의 기능

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

Tistory

[정보처리기사 필기 요약] 객체지향

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

Tistory

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

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

Tistory

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개 ..

Tistory

장고 프로젝트 생성

$ 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/ 디렉토리 내부에는..

Tistory

[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; }..

Tistory

[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으로 설치..

Tistory

[ANDROID] byteArray to String

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

Tistory

[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..

Tistory

[ANDROID] byte array 초기화

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

Tistory

[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");

Tistory

[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,..

Tistory

[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..

Tistory

[ANDROID] Dialog 밖의 어두운 배경 없애기

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

Tistory

[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..

Tistory

[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); }

Tistory

[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); }

Tistory

[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()

Tistory

[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...

Tistory

[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 ..

Tistory

[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..

Tistory

[꿀팁] 메모리 확인

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

1 2 3