반응형

프로그래밍 214

javascript 얕은복사, 깊은복사에 대한 이해

복사는 값의 전달을 목적으로 합니다. 문서를 복사하는 것처럼 컴퓨터 내에서도 파일을 복사하거나 하죠. 컴퓨터 사용 시 흔하게 파일을 복사합니다. 원본이 있을테고 복사한 파일은 원본과 똑같지만 원본은 아닙니다. 그리고 복사본을 수정한다고 해도 원본은 변하지않고 복사본만 수정되겠죠. 위와 같은 방식이 일반적인 사람들이 익숙해져 있는 사고방식입니다. 실제 생활에서의 복사본은 원본과 연결되지 않습니다. 그리고 이 방식을 깊은복사라고 이해해 두시면 되겠습니다. 얕은복사 전에 참조를 먼저 javascript만 공부하신 분이라면 대략 다음과 같이 얕은 복사를 이해 또는 암기하고 계실겁니다. 객체를 얕은복사를 하면 객체의 원소 중 원시타입이 아닌 객체에 대해 참조를 공유한다. 네 이 말은 맞습니다. 하지만 전 이렇게 ..

파이썬 클래스 getter, setter와 네임맹글링(name mangling)

getter와 setter의 사용 의미 getter/setter 클래스의 속성값에 직접 접근 막기 위함에 목적이 있습니다. 직접 접근을 막고 정해둔 메소드로만 접근하게 함으로서 메소드의 특성도 얻게되므로 값의 조작이나 값의 검증하거나 제한할 수 있습니다. 파이썬의 getter/setter의 사용법 파이썬에서 getter와 setter는 property 장식자를 사용하여 만들 수 있습니다. 앞으로 제시되는 예제는 3단계를 거쳐 문제점이 수정되어 완성되갑니다. 1단계 - 순수한 getter/setter # getset.py class GetSetTest(): def __init__(self): self.count = 1 def get_count(self): # getter return self.count d..

react-native eslint 설정

eslint란? lint는 linter라고도 하며 소스코드의 문법오류나, 버그등을 찾아주는 도구라 할 수 있습니다. 이러한 linter는 최신 개발환경에는 필수로 자리잡았습니다. 그러므로 어떤 언어든 개발을 하기 앞서 linter의 활용법을 잘 알아야 합니다. 자바스크립트에서 사용하는 linter는 ESlint입니다. 앞서 강의에서 react-native typescript 환경을 설치한 후 시작하도록 하겠습니다. $ npx react-native init TestProject --template react-native-template-typescript 위 설정만으로도 eslint가 설치됩니다. 기본 설치 (V7.32.0) 버전이 설치되는데 최신 버전의 eslint를 설치하도고 싶다면 다음과 같은 과정..

javascript setter/getter naming convention

기본적인 자바스크립트 객체의 속성에 접근은 아무런 제한없이 이루어지면 속성의 변환도 자유롭다. 이런 자유로운 접근은 간혹 잘못된 입력을하는 등의 실수를 초래한다. 어떤 객체의 속성에 넣을 값의 범위를 알거나 제한할 필요가 있다면 속성에 직접 접근은 제한하여 최대한 안전하게 속성값을 사용하도록 만드는 것이 중요한다. 이런 역할을 하는 것이 setter/getter이다. setter/getter는 대부분의 언어들이 문법적으로 지원하며 사용방법도 비슷한다. 이렇게 setter/getter를 사용하면 속성을 비교적 안전하게 사용하도록 하고 좀 더 정교한 추가적인 처리를 할 수 있다. 이 글에서는 setter/getter를 사용하는 핵심을 객체 리터럴 과 클래스 방식 두가지로 설명한다. 먼저 property를 가..

리눅스(Rocky Linux)에서 rust 설치 및 VSCode 설정

리눅스 설치지 과정이지만 윈도우 설치에 대한 내용도 같이 있습니다. 러스트의 설치는 간단하다. 공식문서 참고 $ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh $ source ~/.cargo/env 설치를 마친 후 설치 확인 $ rustc --version rustc 1.60.0 (7737e0b5c 2022-04-04) 문서를 보면 일부 러스트 패키지가 C코드에 의존적이기 때문에 링커를 실행할 수 없다는 에러가 발생할 수 있다고 한다. 따라서 C컴파일 환경을 구성하는 것이 좋다. 이 부분은 windows 사용자와 linux 사용자의 구성방법이 다를 수 있다. C 개발환경 설치 windows 사용자 https://visualstudio.mi..

파이썬 강좌 - python abc 추상 클래스

이 강의는 python3 문법입니다. 추상클래스라는 용어는 C++의 추상클래스와 비슷하게 이해할 수 있다. 자바(java)라면 interface라 볼 수 있다. C++이나 JAVA를 몰라도 상관은 없다. 쉽게 말해 추상클래스는 메소드의 구체적인 구현이 없는 클래스를 말한다. 이런 클래스를 왜 만들까 한번 10초만 고민해보자. 추상클래스의 목적은 일종의 틀을 제공해주는 역할을 한다. 이 틀은 추상클래스를 상속하는 클래스들에게 특정 메소드의 구현을 강제하는 효과가 있다. 앞서 말한 C++의 추상클래스라면 메소드를 _순수 가상함수_라는 형식으로 정의하여 이를 상속하는 클래스들에게 순수 가상함수를 강제구현하도록 하는 지시를 하는 것이다. 자바의 경우는 interface가 같은 역할을 한다. 우선 본론에 들어가기..

sql 쿼리 Join시 카테시안 곱 주의(with sqlAlchemy)

보통 JOIN 시에 조건을 주지 않았을 때 발생한다고 한다. 상식적으로 생각해봐도 JOIN 조건이 없다면 기준이 되는 테이블(Outer Table)과 대상 테이블(Inner Table) 간에 관계가 만들어지지 않는다. postgresql 쿼리에서 JOIN 문이 ON 조건없이 조인을 할 수 없으며, 위 내용의 조건이란 다음과 같은 쿼리를 의미한다. 조건없는 조인SECLECT * FROM Table1, Table2; 조건있는 조인SELECT * FROM Table1, Table2 WHERE TABLE1.id = TABLE2.id; 위 예의 조건없는 조인과 같이 관계(WHERE)가 만들어지지 않은 채로 JOIN을 하게 되면 Error가 발생하지 않고 양 테이블의 row간에 대카테시안 곱의 방식의 결합이 일어난..

react-native-reanimated 에러관련 기록

react-navigation/drawer 6.1.6 를 사용할 때 react-native-reanimated 2.x.x 을 설치하면 warning 메세지가 뜬다. 2.x.x 버전 사용을 위해 추가 설정을 하라는 메세지다. 공식페이지 에 가보면 버전별 설정 방법이 나와있으면 그렇게 어렵지 않다. 2.x.x 번대를 설치하고 drawer를 잘 구성하고 debug 모드로 테스트까지 잘 끝났다고 방심하면 안된다. 우리를 release 버전이 제대로 돌아가는지도 테스트해야한다. react-native가 참 개발이 좋게 되어 있지만 이렇게 release 모드에서 앱이 실행시 런타임에러가 나면서 앱이 종료되는 경우가 많이 생긴다. 그래서 라이브러리를 설치한 후에는 반드시 release 모드로 제대로 앱이 빌드되는지 ..

sqlAlchemy, Foreign Key, relationship, remote_side 정리

문서가 너무 방대해서 다 이해하지 못한채로 대략 정리한다. sqlAlchemy는 컬럼에 Foreign Key를 설정한 후 orm을 위한 관계 설정을 relation 함수로 한다. relation 함수는 기본적으로 Foreign Key는 한개로 가정하므로 Foreign Key 설정된 컬럼을 지정할 필요가 없다. 그러나 테이블 내에서 Foreign Key를 2개이상 사용할 경우는 지정해야한다. 지정하는 방법은 relation 함수에서 primaryjoin 설정 또는 foreign_keys 를 설정하는 방법인 듯 하다.참조, 2개 이상의 Foreign key remote_side는 자기참조 관계에서 primary key 지정에 사용되는 것 같다. 지정은 반드시 "자신의모델(클래스명).primaykey컬럼" 을..

react-native release 모드로 배포시 주의할 점(http 안되는 문제).

개발모드에서는 잘 되던 앱이 react-native에서 release 모드로 테스트를 하거나 build를 한 후 먹통이 되는 경우가 있다. 가장 흔히 겪는 문제는 api 호출이 제대로 안되는 경우인데, 원인은 http 프로토콜을 사용하기 때문이다. 기본적으로 react-native는 release 모드에서 http의 호출을 막는다. 따라서 https를 사용하도록 설정해야하는데, 여의치 않을 때 다음과 같은 설정으로 http 모드를 허용해주는 방법을 사용한다. android/app/src/main/AndroidManifest.xml 에서 ... ... android:usesCleartextTraffic="true" 추가

반응형