목록개발 (194)
파파비의 블로그
전치리기 지시문은 스크립트들을 효율적으로 관리하는 데에 상당히 좋다. 예를 들면, 유니티로 앱을 개발하는데, 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하고... 버튼은 하나 생성해서 어디 아래로 넣어라! 라고 변화의 '과정'을 명시하는 것이죠. 이러는 과정에서 개..
플러터에서 ListView는 어느 정해진 공간안에 컨텐츠가 들어가고, 그 컨텐츠의 사이즈가 부모(ListView)의 사이즈보다 커지면 자동으로 스크롤이 생기는 위젯을 의미한다. ListView.Builder는 이름만 봐서는 무슨 함수같지만, 사실 이친구도 위젯이다. 그리고 ListView처럼 안에 내용물이 많아지면 스크롤이 생긴다는 점은 같지만 내용물을 보여주는 내부 원리는 다르다. ListView.Builder 매우 많은 양의 리스트를 보여줄 때 유리하다. ListView.Builder는 동적으로 필요한 부분만, 보여줄 부분만 생성하기 때문이다. 스크롤이 내려가면 그때서야 필요한 부분들을 생성한다. 보여주려는 리스트가 10~20개 정도가 아닌, 수천개라고 해보자, ListView는 build 메소드가 ..
기본스트림을 활용하면 불편한 점들이 많다. 먼저 항상 전송되는 data는 byte로 변환해야하는 불편함도 있고, 보안 등의 이슈도 생실 수 있다. 그래서 필터스트림이라는 것이 있다. 필터스트림은 직접적인 in/out 기능은 없다 기본 스트림에 필터를 붙이듯 기능이 추가된 스트림이다. (기본 스트림은 데이터의 송수신만 가능하기 때문이다.) 필터스트림을 사용하는 방법은 먼저 기본스트림 객체를 만들고, 필터스트림 객체를 만들 때 기본스트림을 넣으면 된다. 필터스트림은 data를 출력할 때, 우리가 굳이 byte로 안바꾸게 할 수도 있고, 보안을 유지하게끔 암호화를 해줄 수 도 있다. 필터스트림의 종류는 다양하며 filterstream을 상속하는 것들을 필터스트림이라고 한다. 코드를 통해 확인해보자 //먼저 t..
우리는 프로그램 내부에서 데이터를 사용할 때, 변수를 만들어서 저장하거나 클래스를 만드는 등의 방법을 사용한다. 그러나 프로그램 외부의 데이터를 사용할 때는 어떻게 할까? 가장 기본적인 방법으로 자바에선 stream이라는 도구를 사용한다. stream에는 기본스트림이라는 것이 있다. inputstream, outputstream을 직접 상속 받은 것으로 입출력 기능을 갖고 있는 클래스들을 의미한다. 그외 필터스크린을 상속받은 것들은 inputstream, outputstream을 객체로 받아서 사용할 수 있다. 기본스트림은 데이터를 주고 받을 때 바이트 형태로해서 주고받을 수 있다. FileOutputStream - 프로그램에서 파일로 데이터를 전송할 때 사용하는 스트림이다. - 데이터를 보내고자 하는 ..
예외 class의 가장 상위는 Exception 클래스이다. Exception은 크게 2개로 나눌 수 있다. Exception과 RuntimeException이다. RuntimeException은 Exception을 상속한 exception인데, 이 예외를 발생시키는 것들은 코딩단계에서 예외처리가 필수는 아니다. 반대로 Exception을 바로 상속한 class들, RuntimeException을 상속하지 않은 Exception들은 예외처리를 필수로 요구된다. 그렇다면 예외를 처리는 어떻게 할까? 하는 방법이 2가지가 있다. try-catch를 통해 직접처리하는 방법과 throws를 통해 직접처리하지 않고 떠넘기는 방식이 있다. 먼저 try-catch부터 파악해보자 try{ //여기에는 에러가 날 수 있..