* 개인적으로 학교 학회 세미나를 위해 만들어진 자료입니다 먼저 Git 을 설치해야해요. 윈도우/맥 버전 따로 참고하세요! 윈도우 환경에서 깃 설치하기 https://coding-factory.tistory.com/245 [Git] 윈도우 Git 설치하기 (Git for Windows) GIt을 사용하려면 먼저 Git이 PC에 설치되어 있어야합니다. Git설치방법에 대해 알아봅니다. 윈도우버전 Git설치하기 1. Git 설치파일을 다운로드 받습니다. 아래에 링크되어 있는 페이지에 들어가서 coding-factory.tistory.com 맥 환경에서 깃 설치하기 https://velog.io/@wijoonwu/Mac-OS-%EC%97%90%EC%84%9C-Git-%EC%84%A4%EC%B9%98%ED%95..
구조체의 bit_field란? 구조체의 정수 타입의 멤버 변수를 비트 단위로 쪼개서 사용할 수있도록 하는 방법이다. Struct 구조체이름{ 정수형type 변수명 : 비트수 } 와 같이 사용한다. (정수형type 은 (unsigned/signed) char, short, int, long 이 있다.) 예를 들어서 bit_field 구조체 안에 unsigned char a : 3; unsigned char b : 2; 라고 코드가 작성되어 있다면 bit_field 구조체는 char 타입 1바이트(8비트)를 메모리에 할당하고 a가 3비트, b가 2비트를 사용한다. 만약에 사용할 비트 합이 할당할 데이터 타입보다 크다면 (예를들어 비트의 총 합은 10비트인데 unsigned char은 8비트) 할당할 데이터 ..
struct은 구조체라고 한다. 구조체는 하나 이상의 서로 다른 종류의 변수들을 묶어서 새로운 자료형을 정의하는 것이다. 구조체를 사용하면 연관된 변수들을 하나로 묶어서 관리함으로써 데이터 관리에 유용하다. 따라서 데이터 양이 많아지면 유리한 편이다. 사용할 때에는 struct 라는 키워드를 사용한다. 구조체의 멤버에 접근하려면 구조체 변수를 통해서 구조체 멤버의 값을 참조 해야한다. 멤버에 접근할 때에는 .(dot) 을 사용하는데 이를 직접 접근이라고 한다. 예를 들어 다음과 같다. [구조체 변수명].[구조체 멤버] st1.name union은 공용체라고 한다. 공용체도 struct와 같이 사용자가 정의한 자료형인데 다른 점이 있다면 공용체는 메모리 공간을 공유한다. 예를 들어서 구조체에서 char a..
Facade Pattern 프로그램이라는 것은 점점 커지는 경향이 있음 많은 클래스가 만들어져 서로 관계를 맺으면서 복잡하게 됨 상호 관련된 많은 클래스를 적절하게 제어해야 함 그 처리를 실행하기 위한 창구 역할을 하는 별도의 인터페이스를 두는 것 Facade 는 건물의 앞면을 의미한다 -> Facade Pattern 이란 건물의 앞면처럼 그 뒤쪽의 복잡함은 내부에 숨기고 간단한 인터페이스만 제공 Client는 여러 라이브러리와 클래스를 필요로 하는 상태 이런 경우 여러 클래스나 라이브러리를 조합해서 더 간단한 인터페이스를 제공해주는 클래스를 생각해볼 수 있음. -> Client는 복잡한 클래스와 라이브러리 상대할 필요없이 간단한 인터페이스만 제공하는 Facade Pattern 사용해서 더 쉽게 개발 우..
QtSpim 이란? MIPS 프로세서의 시뮬레이터로서, 어셈블리 코드를 실행하기 위해 설계된 소프트웨어이다. 편집 공간이 따로 존재하지 않고 작성된 코딩파일을 동작시킬 수 있다. (SPIM은 "MIPS"를 거꾸로 변형한 단어이다.) https://sourceforge.net/projects/spimsimulator/files/ spim mips simulator - Browse Files at SourceForge.net This directory contains compiled, installable copies of Spim for various operating systems: QtSpim: QtSpim_*_Windows.zip -- Windows (32 or 64 bit) QtSpim_*_mac...
Translation and Startup Translation and Startup Translation Example • 0 ~ 100의 정수 제곱합을 계산하고 출력 label : 주소를 symbolic하게 나타낸 것 sd : 8바이트의 데이터를 어딘가에 저장해라. mips 명령어에 존재X. 실제 Assembler에 의해서 두개로 바뀐 걸 볼 수 있음. macro : 반복되는 코드들을 간단하게 표현해서 사용 comment : 주석. mips에서는 #을 이용 Translation 컴파일러 – Inputs: • Programming language code 및 명령어 집합 • 메모리 및 레지스터 구성 – Output: Assembly language code – Compiler’s function • S..
Concurrent Processes(동시실행 프로세스) (1) 실행 중인 프로그램 시스템은 여러 동적 동시 프로세스(dynamic concurrent processes)로 구성된다. IPC와의 공동 작업 프로세스의 set Concurrent process 프로그래밍 툴 • Concurrent languages (Ada, Java, PathPascal, Modula II) • C, C++,.. concurrent programming 을 위한 system call (Linux, UNIX, Win32 Environment) Applications (Objectives) • Networked (or distributed) applications – 네트워크 앱 : 클라이언트 프로세스, 서버 프로세스 – Di..
structural design pattern : 클래스 간 구조/관계를 정의하는 패턴 Adapter Pattern 하나의 인터페이스를 다른 인터페이스로 전환하는 역할 -> 이러한 역할을 Adapter Pattern에도 적용 '이미 제공되어 있는 것'과 '필요한 것' 사이의 차이를 없애주는 디자인 패턴을 Adapter Pattern이라고 함. ex) 교류 110볼트 콘센트 ~ Adapter ~ 직류 12볼트의 노트북 Adapter Pattern 은 Wrapper Pattern 으로 불리기도함 Wrapper 는 '감싸는 것'이라는 의미가 있는데 무엇가를 포장해서 다른 용도로 사용할 수 있게 교환해주는 것이 wrapper이며, adapter 라고 함 두 가지의 종류 - 클래스에 의한 Adapter Patte..
Prototype Pattern 이란? - 종류가 너무 많아 클래스로 정리되지 않는 경우 - 클래스로부터 인스턴스 생성이 어려운 경우 - 프레임워크와 생성하는 인스턴스를 분리하고 싶은 경우 이런 경우 클래스로부터 인스턴스를 만드는 것이 아니라 인스턴스를 복사해서 새로운 인스턴스를 만드는 게 좋음. 프로토타입 패턴을 적용하기 위해서는 Clone()이라는걸 가지고 있어야한다. 자기 자신을 복사할 수 있도록! 그리고 구체적인 클래스 정의를 해서 원형의 프로토타입을 상속 받는다. class Cat: def __init__(self): self.color = None self.eye_color = None self.nose_color = None self.tail_color = None self.name = No..
수업시간에 과제를 구현하면서 빅 엔디안과 리틀엔디안에 관련해서 이해해야하는 부분이 있었다. https://www.save-editor.com/tools/wse_hex.html HEX & LITTLE ENDIAN CONVERTER - SAVE-EDITOR.com www.save-editor.com 여긴 내가 잘 구현했는지 확인해보기 위해서 이용했던 엔디안 변환 사이트 bit 와 byte 일단 컴퓨터는 모든 데이터를 2진수로 표현하고 처리한다. bit 는 데이터의 최소 단위이다. 0아니면 1만 저장이 가능하다. byte는 이러한 bit가 8개 모여서 구성된다. 이건 한 문자를 표현할 수 있는 최소 단위이다. 컴퓨터는 데이터를 메모리에 저장할 때 byte 단위로 나누어서 저장을 한다. 보통 컴퓨터가 저장하는 ..
C언어에서는 텍스트파일과 바이너리 파일은 구분해서 사용된다. 잘못 읽어 들이는 것을 방지하기 위함이다. 먼저 텍스트 파일은 문자로 구성된 파일이며, 대부분 ASCII(아스키코드)문자로 이뤄진 파일이나 사람이 사용하는 한글, 영문 같은 문장들로 이뤄진 파일이다. 텍스트 파일은 연속적인 라인들로 구성되어 있으며 그 예로 확장자가 cpp인 프로그램 소스코드 파일이나 메모장에서 작성한 txt 파일 등이 있을 것이다. 이러한 텍스트파일과 달리, 이진파일은 데이터로 구성된 파일이다. 사람이 읽을 수는 없지만 컴퓨터는 읽을 수 있는 파일이다. 모든 파일은 0과 1로 이루어져 있으며 바이너리 파일이라고도 부른다. 텍스트파일은 라인들로 분리되는데 이진파일은 라인들로 분리되지 않는다. 그리고 모든 데이터들은 문자열로 변환..
Linux File System 리눅스 커널은 몇 가지로 모듈화 되어 있음 가장 중요한 것은 disk 안에 있는 파일을 관리 한다는 것 파일에 관련된 인터페이스를 유저에게 제공하는 system call API를 제공 유저는 이 system call API를 통해 커널에 접근 가능 그리고 커널은 자신이 관리하는 구조에 의해서 파일에 대한 쓰기 읽기/접근 권한/삭제/생성 을 관리한다. - 파일 시스템 안의 각각의 파일들은 inode 를 가진다. - inode 는 파일에 대한 정보를 관리하는 자료구조이다. - 일반적으로 파일 시스템은 파일의 데이터 영역(실제 파일이 적혀 있는)과 파일 정보를 관리하는 영역(Metadata)으로 나뉨. Metadata 중 하나가 inode - inode contents (C s..
Linux System Calls File descriptor I/O ->리눅스는 posix interface를 따른다. • open(); close(); creat(), read(); write(); • seek(); // random access • fcntl(); // for file/record locking Process control Thread programming IPC Signal handling Memory management Synchronization Time management Network socket API (TCP, UDP) System Calls & Library Calls for File I/O System Calls for File d..
Shell? - 유저가 운영체제에 접근하도록 해주는 interface(명령어 기반) - Functionality : * 다른 프로그램을 (command line으로) 실행 * 파일 관리(OS안의 파일과 프로세스를 command line으로 관리) 터미널에서 command를 치면 shell을 통해서 kernel(즉, OS)에 전달해서 기능함 * 프로세스들을 관리 - A program like any other one - log on 할때 실행됨. 흔히 사용되는 Shells - /bin/sh The Bourne Shell / POSIX shell – /bin/csh C shell – /bin/tcsh Enhanced C She – /bin/ksh Korn shell – /bin/bash Free ksh cl..
C언어 데이터 타입의 종류와 연산자의 동작을 표로 정리해봤다! 자료형 설명 byte 범위 정수형 부호있음 Short Short형 정수 2 -32768 ~ 32767 Int 정수 2 or 4 -2147483648 ~ 2147483647 Long Long 형 정수 4 -2147483648 ~ 2147483647 부호없음 Unsigned short 부호없는 short형 정수 2 0 ~ 65535 Unsigned int 부호없는 정수 2 or 4 0 ~ 4294967295 Unsigned long 부호없는 long형 정수 4 0 ~ 4294967295 문자형 부호있음 Char 문자 및 정수 1 -128 ~ 127 부호없음 Unsigned char 문자 및 부호없는 정수 1 0 ~ 255 부동소수점형 Float ..
von Neumann 아키텍처와 Harvard 아키텍처를 비교해서 정리해보았다. CPU 레벨에서 메모리에 접근하는 방법에 관해 고려해야할 두 가지 설계(design)가 있는데, 첫번째는 Von Neumann architecture이고 두번째는 Harvard architecture이다. 메모리 사용방식에 따라서 두 프로세서 architecture를 분류할 수 있다. 이 두 architecture의 중요한 차이점은 Von Neumann architecture 에서는 동일한 메모리와 버스가 프로그램을 실행하는 데이터 및 명령어를 저장할 수 있다는 것이다. 프로그램 메모리와 데이터 메모리에 동시에 접근할 수 없기 때문에 Von architecture는 병목 현상에 취약하고, 이것은 시스템 성능에도 영향을 미친다..
문제 1 1.1: 1개, 2개, 4개, 8개의 코어를 사용하는 경우, 프로그램의 실행시간은 얼마인가? [풀이] CPI란, 명령어 하나를 처리하는데 필요한 클럭 사이클 수를 의미한다. 문제에서 주어진 프로세서에 대해 정리하자면 다음과 같다. 산술 명령어 적재/저장 명령어 분기 명령어 CPI 1 12 5 명령어 개수 2.56E9(2.56x109) 1.28E9 2.56E8 프로세서는 2GHz 의 클럭 주파수로 동작하는데, 이는 1초에 클럭 사이클이 2*10^9번 임을 뜻하며 클럭 속도가 2*10^9 라는 말과 같다(1GHz = 10^9). 프로그램의 실행시간 = CPU 클럭 사이클 수 / 클럭 속도 = CPU 클럭 사이클 수 * 클럭 사이클 시간 CPU 클럭 사이클 수 = 명령어의 수(IC) * CPI 프로그..
Singleton Pattern 개요 글로벌하게 접근가능한 단 한개의 객체만을 허용하는 패턴 - 클래스에 대한 단일 객체 생성 - 전역 객체 제공 - 공유된 리소스에 대한 동시 접근 제어 - 글로벌 액세스 지점을 제공하는, 단점이 거의 없는 검증된 패턴 생성자를 private로 선언하고, 객체를 초기화하는 static 함수를 만들어 구현할 수 있음. 첫 호출에 객체가 생성되고, 그 후 클래스는 동일한 객체를 계속 반환함.] class Singleton(object): def __new__(cls): if not hasattr(cls, 'instance'): print('create') cls.instance = super(Singleton,cls).__new__(cls) else: print('recyc..
Builder Pattern - object의 생성과정이 복잡할 때 이를 간단하게 만들어 줌 ex) 하나의 오브젝트를 생성할 때 여러개의 argument가 필요할 때 Builer패턴이 쉽게 만들어줄 수 있음. Builder Pattern의 개념 Diagram 더 세부적인 객체를 생성할 수도 있을 것이다. 예시로 vector class를 만든다고 해보자 vector는 N차원 array 이며, 우리가 시각화 할 수 있는(Graph로 표현할 수 있는)건 2,3차원 이다. 2D/3D vector object를 생성할건데 builder pattern을 통해 만든다고 해보자 * 기능은 내가 추가 해보기! import math from multiprocessing import set_forkserver_preload..
Creation Design Pattern(생성 디자인 패턴) 오프젝트를 생성하는 방법을 다루는 패턴 - Factory Pattern - Abstract Factory + Factory Method Pattern - Builder Pattern - Singleton - Prototype Factory Pattern - 객체지향에서 팩토리란 다른 클래스의 객체를 생성하는 클래스를 말함 - 일반적으로 팩토리는 객체와 관련 메소드로 구성 - 클라이언트는 특정 인자와 함께 메소드를 호출하고 팩토리는 해당 객체를 생성하고 반환. 공장은 함수 또는 클래스로 나타낼 수도 있음 공장에 원하는 물건을 만들어 달라고 요청하면 그 제품을 만들 수 있음. Robot은 추상클래스 함수(인자) 간접적으로. 생성과정에 관여 X U..
What is UML? - 시스템을 시각화 하거나 시스템의 사양이나 설계를 문서화하기위한 표현방법 - 통합 모델링 언어는 객체 지향 프로그래밍 소프트웨어 집약 시스템을 개발할 때 산출물을 명세화, 시각화, 문서화할 때 사용. - 일반적으로 UML의 범위는 매우 넓지만, 여기선 클래스 다이어그램 및 시퀀스 다이어그램에 대해서만 커버함 - Code Pattern들을 표현할 때에도 유용함. 클래스 다이어그램 : 클래스와 계층관계 하위 클래스(자식 클래스)가 상위클래스(부모 클래스)를 참조하고 있다 -> 화살표로 표시! 클래스 다이어그램 : 구현관계 클래스 다이어그램 : 집약(aggregation) 클래스의 관계 시퀀스 다이어그램 UML의 시퀀스 다이어그램은 프로그램이 작동할 때 어떤 메소드, 추상클래스가 어떤..
SOLID principles Single Responsibility Open-Closed Liskov Substitution Interface Segregation Dependency Inversion Single Responsibility Principle(SRP)(단일 책임 원칙) : 단일 책임 원칙이란 모든 클래스는 하나의 책임만 가져야함. - 클래스 구현할 때 한가지 기능에만 중점을 두기. 두가지 이상의 기능이 필요할 때에는 클래스 나누기 - 장점 : 특정기능 수정할 때 관련 클래스 외에는 건드릴 필요 없음. - 한 개의 클래스에 여러 기능이 있었다면(SRP 지키지 않았다면)? 관련된 모든 클래스 수정해야하는 상황 발생 가능 - add 함수는 덧셈만 함 - numPrint 함수는 숫자 출력만 함..
객체지향(OOP)의 이해 객체지향(OOP)의 맥락에서 객체는 속성과 함수로 구성 ex) Car 라는 객체가 있을 때 속성 : fuel, speed, steering wheel, coordinate... 함수 : accelerate(), takeLeft()... 객체지향 프로그래밍 : 객체 객체의 특성 - 객체는 다른 객체와 상호작용함 - 프로그램으로 무언가를 구현할 때 그 세계관(scope) 내부의 의미있는 정보의 단위들 - 실제 눈에 보이는 물리적인 객체가 아닌 추상적인 객체로 생각해야 객체지향 프로그래밍 : 클래스 클래스 사용하여 특정 객체 표현 가능 - 클래스는 속성과 행동을 포함하는 객체를 정의 - 속성은 데이터의 요소이고 함수는 특정 작업 수행 - 클래스에는 객체의 초기 상태를 설정하는 생성자 ..
https://covenant.tistory.com/68 [컴퓨터 구조]Chapter 1. Computer Abstractions and Technology [Class of Computers] Personal computers - General purpose, variety of software. - Subject to cost/performance trade off. Server computers - Network based - High capacity, performance, reliability. -.. covenant.tistory.com
Operating System(OS) 컴퓨터 사용자와 컴퓨터 하드웨어 사이의 중개자 역할 Operating system 의 목표 - 컴퓨터 시스템 사용을 편리하게 한다. - 컴퓨터 하드웨어를 효율적으로 사용한다. 기본 OS 개념 - Multi-use environment 여러 유저가 동시 사용하는 환경 - Process and Scheduling 여러 프로그램 동시 실행 - User space and Kernel space 여러 프로그램을 독립적으로 작동하도록 Address space를 관리하고 User 레벨과 Kernel 레벨을 별도로 관리한다 - Basic and Advanced I/O 컴퓨터 시스템의 주요 자원이 주변장치(I/O)를 통로를 제공한다. 장단점 장점 - 오픈소스 : developer v..
ref : 코딩 애플[Flutter로 만드는 iOS, Android 앱] 강의 실제로 유저의 연락처를 꺼내보자 연락처 꺼내는 패키지를 설치해야한다. 전구 누르고 pub get 해서 설치까지 하자 main.dart 파일에도 패키지 import 까지 해주기 허락이 되었을 때에 연락처를 가져오는 코드를 짜봤다. contacts 라는 변수에 패키지 사용법에 따라 await ContactsService.getContacts(); 라고 작성해줬다. 그럼 저 contacts 에 연락처가 담기게 된다. 오래걸리는 코드이기때문에 await 을 붙이는 것이 권장된다(패키지 사용법일 뿐) 근데 실행하면 새폰이기 때문에 print(contacts) 해도 암것도 안뜬다. 그래서 위처럼 연락처들어가서 따로 추가해줬다. 연락처 버..
ref : 코딩 애플[Flutter로 만드는 iOS, Android 앱] 강의 사용자의 실제 연락처를 꺼내쓰는 법! 먼저 사용자한테 허락을 받아야 한다.(갤러리나 위치사용 허락받는 것처럼) 패키지를 하나 깔아야한다. permission_handler 라고 함. pubspec.yaml 파일에 가서 dependencies 에 저 코드를 추가해준다. 위에 전구가 하나 뜰텐데 누르면 pub get 이라고 뜬다 저거 누르면 알아서 설치 해준다. 더 세팅할게 필요한데 main.dart 파일로 가서 맨위에 import 'package:permission_handler/permission_handler.dart'; 코드를 추가한다. 그리고 안드로이드 폰에서 permission 을 받고 싶으니까 다음처럼 되어있는지 확인..
ref : 코딩 애플[Flutter로 만드는 iOS, Android 앱] 강의 개강은 했지만.. 틈날때 하나씩이라도 들으려고 한다. 배우는 건 재밌어서 다 배우고 나서 뭐 하나 만들어보고 싶기 때문..!! 가상기기 뜨는게 없어서 따로 추가작업이 필요할 것 같다. Intel CPU 쓰고 있으니까 Intel x86 Emulator 어쩌구 체크했다. 그리고 Tools 들어가서 device manager 에서 가상기기 만들기 눌렀다. pixel 5 로 골라야지 강사님이 30이나 31로 비슷하게 다운로드 받으래서 난 30으로 다운받고 이름짓고 마무리 지음. 이제 가상 안드로이드 기기 띄우려면 android emulator 눌러서 폰 들어가자 기기명 안보이면 기다리거나 refresh 누르기 가상기기 잘 떠서 이걸로..
ref : 코딩 애플[Flutter로 만드는 iOS, Android 앱] 강의 부모에 total 이라는 state 를 만들어보자 total == 앱에 저장된 친구수 이 total 값은 appBar 에도 확인할 수 있게 해놓았다. 그리고 다이얼로그안에 있는 완료버튼을 눌렀을 때 저 값이 +1씩 되도록 만들어보려고한다. 저 다이얼로그가 새로운 친구 등록 화면임 부모위젯에 있는 state 인 total을 자식위젯에서 변경하고 싶으면 1. 일단 부모에 수정함수를 작성 addOne이라는 수정함수를 부모위젯에 작성했다. state 를 수정하려면 setState에 넣어야했었다. 2. 자식위젯으로 보내기 왼쪽에는 작명 오른쪽에는 실제로 보내고 싶은 변수명(함수명)을 쓰면된다. 3. 그리고 자식위젯에 등록을 한다. 4...