목록전체 글 (214)
파파비의 블로그
C#에서는 메모리구조로 스택과 힙을 사용한다. 그 중에서 스택에 대해 얘기해보려고 한다. 스택은 하나의 쓰레드가 실행될 때 해당 쓰레드에 1MB의 메모리가 할당된다. 스택의 역할은 메서드의 실행, 메서드로 전달하는 인자, 메서드 내에서 사용되는 지역변수 등을 처리 한다. 메소드들도 스택에 의해 관리되는데, 메소드의 끝을 알리는 } 를 만났을 때, 해당 메소드와 관련된 모든 데이터들은 스택에서 해제된다. 1MB가 작게 느껴질 수 있는데, 사실은 상당히 넉넉한 양이다. 그런데 하나의 메소드에서 필요한 저장공간이 1MB를 넘어서게 되면 에러가 생기며 프로그램이 중단된다. 이를 스택오버플로우라고 부른다. 스택오버플로우의 특이한 점은, 어떤 에러라는 정보가 제공되지 않는다는 점이다. 스택에 에러 관련 내용이 저장..
1. 명령 프롬프트를 킨다. 2. 원하는 곳으로 cd를 통해 이동한다 3. 'flutter create 원하는프로젝트이름' 을 입력한다. 물론 이때 이미 flutter가 path에 설정되어서 flutter 명령어를 인식할 수 있게 해두어야 한다! 또한 vs code에 flutter가 익스텐션으로 깔려있어야 함. 한마디로 설치과정을 제대로 진행했어야 위 단계들도 잘 진행된다 특이 한 점은 에뮬레이터를 키기 위해선 안드로이드 스튜디오에 들어가서 에뮬레이터를 따로 켜주어야 한다. 안드로이드 스튜디오에서 어떻게 가상 에뮬레이터를 키는지는 따로 다루진 않겠다. 아무튼 안드로이스 스튜디오를 경유해야하는 점 때문에 그래서 안드로이드 스튜디오를 사용하는게 더 편리할 수 있다. 그런데 VS code는 훨씬 가볍기 때문에..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/levcE/btqEkN37dZ4/yELRvOe6K0G1KVCVAAtNH0/img.png)
플러터는 하나의 프로그래밍 언어를 사용하여, 하나의 코드베이스(프로젝트)로, 안드로이드와 IOS 둘 다 네이티브 수준으로 만들 수 있게 해준다. 1. 플러터 SDK (개발툴) - 컴파일을 도와주는 등의 개발할 수 있는 환경을 제공하는 것. - 안드로이드 스튜디오나 VS code위에 플러터SDK를 입힐 수 있습니다. 2. 플러터 Framework - 개발을 용이하게 해주는 라이브러리, 위젯, 유틸리티들을 제공해줌 - 프레임워크를 사용하면 굉장히 빠른 시간에 UI들을 재사용 할 수도 있어서 효율적입니다. 하나의 프로그래밍 언어는 Dart입니다. Dart는 한국에서는 아마 굉장히 생소한 언어일 것입니다. 실제로 Java와 C# 그리고 JS를 섞어놓은 듯한 느낌의 언어이고, 언어는 개인적으로는 쉬운 편에 속한다..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bz91RR/btqEjq1Sjav/AK92vPQvpXkvJiqKNbmtz1/img.png)
우리가 함수, function or method를 처음배울 때 흔히 쓰이는 예시가 있다. 바로 '더하기' 기능을 가진 함수 예시이다. 위처럼 2개의 정수를 받아 더한 값을 return하는 그런 함수말이다. 그런데 이 함수는 한 가지 아쉬운 점이 있다. 2개의 정수의 합은 잘 구하지만 3개의 정수의 합을 구할 때는 최소 2번의 계산이 필요하다. a+b+c의 값을 구하려면 int sum = Add(a+b); sum = Add (sum+c); 이렇게 말이다. 이게 3개의 정수가 아니라, 여러 개면 더욱 코딩해야하는 줄 수가 늘어난다. 그럴바엔 안쓰는게 나을 것 같다. 이런 불편함을 해결하기 위해, params 라는 키워드가 존재한다. params는 가변매개변수를 구현할 수 있게 해준다. 가변매개함수는 말 그대..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/uajat/btqEj9RB4wT/dLAHefynm9OwTRRDcACQMK/img.png)
전치리기 지시문은 스크립트들을 효율적으로 관리하는 데에 상당히 좋다. 예를 들면, 유니티로 앱을 개발하는데, ios와 안드로이드 2가지 버전이 필요하다면, 코딩상 약간의 다른 점들 떄문에 프로젝트를 2개로 늘려서 각각 관리해도 되지만 그렇게 되면 유지보수 측면에서 상당히 부담스러울 것이다. 새로 업데이트된 부분이 생기거나, 리팩토링한 부분들이 생기면 똑같이 한 번 더 적용해주어야하고 그러는 과정에서 버그의 리스크는 더욱 올라간다. 전처리기 지시문을 통해서는 하나의 스크립트로 여러가지 버전을 관리할 수 있도록 할 수 있다. 전처리기 지시문은 전처리 상수를 스크립트에 적어주고, 전처리 상수를 속성에 넣거나 빼는 것을 통해서 원할 때 마다 어느 특정부분은 컴파일되고, 어떤 부분은 컴파일 되지 않도록 지시할 수..
객체지향프로그래밍에서 흔히들, 프로퍼티는 private로 설정해야 한다는 얘기를 들어본적이 있을 것이다. 내부적인 값을 외부에 공개하면 여러 리스크들이 존재할 수 있기 때문이다. 그래서 흔히 해당 프로퍼티의 값을 return하는 메소드를 만들고, 해당 프로퍼티의 값을 설정하는 메소드를 만들어두기도 한다. 그런데 이렇게 되면 최소한 프로퍼티의 수 x 2개의 메소드가 필요하다. '최소한'.. 너무 불편하다. 그래서 get, set이라는 것이 존재한다 getter와 setter라고도 한다. 프로퍼티를 설정할 때 곧바로 get, set을 설정할 수 있다. public class Computer { int x { get { return x } set { x = value } } } 이렇게 getter와 sette..
값형식과 레퍼런스형식(참조형식)이 존재한다는 것을 우리는 알고 있다. int, short 처럼 메모리에서 스택 부분에 바로 값이 저장되는 형식을 값형식이라고 하며, 평범한 class의 객체나, string 객체같은 것들은 일차적으로 스택에 주소가 저장되며 그 주소는 힙메모리에 저장된다. 그래서 우리가 레퍼런스 형식의 객체를 호출하면 우리는 먼저 스택으로 가서 주소를 확인한 후, 힙 메모리에 가서 정확한 값을 확인한다. 참고로 힙메모리는 GC(가비지 컬렉터)에 의해 컨트롤 되어서, 종종 GC가 발동할 때면 비용이 크게 들어 잠깐씩 멈출 수 있다. 이제 우리가 이런 것들을 메소드에 넘길 때, 값들은 어떻게 적용되는 걸까? 전달된 값을 그대로 사용할까 아니면 따로 복사해서 사용하는 것일까? c#에서는, 기본적..
플러터는 declarative UI programming 방식을 사용합니다. swiftUI도 그러한 방식을 사용한다고 합니다. 그런데 전 swiftUI가 뭔지 잘 모릅니다 ^^; 아무튼, 안드로이드 스튜디오 같은 형식은 imperative UI programming 방식입니다. 이둘의 차이는 무엇일까요? 전형적인 프로그래밍 방식은 imperative UI programming입니다. imperative UI programming은 변화의 과정을 일일이 개발자가 명시합니다. 예를 들어 레이아웃의 색깔을 변화시킬 경우, 버튼을 늘릴 경우 그 레이아웃 객체의 기존 색을 제거하고, 새로운 색을 add하고... 버튼은 하나 생성해서 어디 아래로 넣어라! 라고 변화의 '과정'을 명시하는 것이죠. 이러는 과정에서 개..