Study Programming 103

변수명, 함수명, 클래스명 잘 짓는 방법 (Clean code: 2ch Naming)

이름을 잘 짓는 규칙들 의도를 분명히 밝힌다. - 변수나 함수 드리고 클래스명은 변수(나 함수 드리고 클래스)의 존재 이유는? 수행 기능은? 사용 방법은? 이란 질문들에 답할 수 있어야 한다. - 주석이 필요하지 않는 수준이어야 함 ㄴ> Bad example) int d; // 경과 시간 ㄴㄴ> Good example) int elapsedTimeInDays; 그릇된 정보를 피하라 (= 이름에 그릇된 단서를 남기면 안된다.) - 유사한 개념은 유사한 표기법을 사용한다. - 기발한 이름, 특정 유머나 문화권의 농담은 피하고 명료하게 표현하라. - 이름에 다른 타입이 포함된 경우  ㄴ> Bad example) List가 아닌 userList  ㄴ> Bad example) 유닉스 플랫폼이나 변종이름인 hp..

Study Programming 2023.11.20

Wrapper class (래퍼 클래스)

선수개념 자바의 자료형은 크게 기본 타입(primitive type)과 참조 타입(reference type)이 있다. - Primitive type : char, int, float, double, boolean 등 - Reference type : class, interface 등 "Primitive type 을 Reference type 객체로 바꾸기 위해서 (포장해) 사용하는 클래스" 들을 ' Wrapper class (래퍼 클래스) ' 라고 합니다. 사용이유: primitive type의 데이터를 Reference type 객체로 표현해야 하는 경우가 있기에 변경방식 : primitive type의 데이터 값을 내부에 불변으로 두고 포장하여 만든다. (값 변경 시 새로 객체 생성해야함) Boxi..

Study Programming 2022.08.16

Blocking, Non-blocking, Sync, Async

Blocking vs NonBlocking : 딴 일하고 와도 돼? 차이점 : 호출된 함수가 바로 리턴(제어권 넘기)하느냐 마느냐 NonBlocking : 응 제어권 줄께, 너 딴 일하고 와 호출된 함수가 바로 리턴해 제어권을 넘겨서 호출한 함수는 자기 할 일 한다. Blocking : 안돼 끝날 때까지 넌 여기서 기다려 호출된 함수가 자신의 작업을 모두 마칠 때까지 호출한 함수에게 제어권을 넘겨주지 않고 호출한 함수가 다른 일 못하고 대기하게 한다. Synchronous vs Asynchronous : 작업완료를 어떻게 알래? 차이점 : 호출한 함수가 '호출된 함수의 완료 여부'를 신경쓰냐 Async (Asynchronous, 비동기, 비동기화) : 너가 끝나고 연락해! 호출된 함수에게 callback..

Study Programming 2022.08.15

reflection 이란?

Reflection(리플렉션, 반영)? : 컴퓨터 프로그램에서 런타임 시점에 사용되는 자신의 구조와 행위를 관리(type introspection)하고 수정할 수 있는 프로세스를 의미 - “type introspection”은 객체 지향 프로그램언어에서 런타임에 객체의 형(type)을 결정할 수 있는 능력을 의미한다. - 코틀린에서 :: 인자를 리플랙션하기 위해 자주 사용한다. Ex) 자바 클래스를 인자로 넘기기 위해 코틀린 클래스 레퍼런스는 '클래스명::class'으로 표현 자바 클래스 레퍼런스는 '클래스명:class.java'으로 표현 출처 https://ko.wikipedia.org/wiki/%EB%B0%98%EC%98%81_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED..

[SOLID] DIP(=Dependency Inversion Principle, 의존관계 역전 원칙)

SOLID 원칙 중 마지막인 5. DIP(=Dependency Inversion Principle, 의존관계 역전 원칙) " '고수준 모듈'은 '저수준 모듈'의 구현에 의존해서는 안 된다. '저수준 모듈'이 '고수준 모듈'에서 정의한 추상 타입에 의존해야 한다." - 다른 말로 "자신보다 변하기 쉬운 것에 의존하 지 마라" - Ex) 고수준 모듈은 자동차 / 저수준 모듈은 스노우 타이어 - '추상화'를 이용해 문제 해결 - Ex) DIP 위반 사례 ⓐ 고수준 모듈인 자동차가 저수준 모듈인 스노우 타이어에 의존하는 상태 ⓑ 일반 타이어로 교체하기로 결정 ⓒ [문제] 의존하고 있던 자동차의 코드도 연쇄적으로 영향을 끼치게 됩니다.(개방-폐쇄 원칙을 위반) class Car(val tire: SnowTire)..

[SOLID] ISP(=Interface Segregation Principle, 인터페이스 분리 원칙)

SOLID 원칙 중 4번째인 1. ISP(=Interface Segregation Principle, 인터페이스 분리 원칙) " 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다." - 다른 말로 "클라이언트는 자신이 사용하는 메소드에만 의존해야 한다." - 클라이언트를 기준으로 인터페이스를 분리함으로써, 클라이언트로부터 발생하는 인터페이스의 여파가 다른 클라이언트에 미치는 영향을 최소화하는 것을 목표로 한다 - Ex) ISP 위반 사례 ⓐ interface Machine 에는 copy(), print(), fax(address: Address) 와 같은 모든 기능별 메소드가 선언되어 있다. ⓑ Machine을 상속받은 'class CopyMachine'는 copy() 외의 기능을..

[SOLID] OCP (=Open-Closed Principle, 개방 폐쇄 원칙)

SOLID 원칙 중 두번째인 1. OCP (=Open-Closed Principle, 개방 폐쇄 원칙) "확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다." - 다른 말로 "기능변경하거나 확장할 수 있으면서 그 기능을 사용하는 코드는 수정하지 않는다."를 의미 - 적용방법 (2가지) => 변화하는 부분을 추상화함으로써 기존 코드를 수정하지 않고도, 확장을 할 수 있게 만들어 줍니다. #1) 변화하는 부분을 추상화하는 것 -> 주로, 인터페이스를 통해서 구현을 합니다. #2) 상속을 이용하는 것 더보기 - ex) 상속을 사용 ⓐ HTTP 응답 프로토콜에 맞춰 데이터를 전송해 주는 ResponseSender 클래스가 존재한다. ⓑ 이때, 기존 기능에 압축 기능을 추가 필요한 상황 발생 ⓒ Respon..

[SOLID] SRP(=Single Responsibility Principle, 단일 책임 원칙)

SOLID 원칙 중 첫번째인 1. SRP : Single Responsibility Principle = 단일 책임 원칙 " 하나의 클래스는 하나의 책임을 가지고 책임을 캡슐화해야 한다. " - 다른 말로 "어떤 변화에 의해 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 함"을 의미 - 책임 이란? ㄴ> 기능변경 시 변화되는 부분을 하나의 책임의 단위로 묶을 수 있다. ㄴ> 각각의 책임은 서로 다른 이유로 변경되어야 한다. ex) 데이터를 읽어 오는 책임의 기능이 변경될 때 데이터를 보여주는 책임은 변하면 안 됩니다. - 왜 '단일 책임'을 가져야 하는가? ㄴ> 책임의 개수가 많아질수록 한 책임의 기능 변화가 다른 책임에 주는 영향이 비례해서 증가하기 때문에 확장 및 유지보수가 어려워진다. ㄴ> ex)..

[SOLID] 객체지향 SOLID 원칙 (=객체지향 5대 원칙=SOLID원칙)

본 포스팅에서 Design Pattern이라고 매번 쓰기 귀찮아 'DP'로 일컫으려고 합니다. 객체지향 SOLID 원칙 - [대략설명] 객체 지향 개발 시 가급적 지켜야할 5개 원칙의 약자 모음 - [상세설명] SOLID 원칙들은 소프트웨어 작업에서 프로그래머가 소스 코드가 읽기 쉽고 확장하기 쉽게 될 때까지 소프트웨어 소스 코드를 리팩터링하여 코드 냄새를 제거하기 위해 적용할 수 있는 지침이다. - [종류] 이 원칙들은 애자일 소프트웨어 개발과 적응적 소프트웨어 개발의 전반적 전략의 일부다. - [배경] 로버트 마틴[1][2]이 2000년대 초반[3]에 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙 SOLID 원칙 종류 SRP 단일 책임 원칙 (Single responsibility pr..

코드 스멜(code smell←코드 냄새)

코드 스멜(= code smell = 코드 냄새) : 컴퓨터 프로그래밍 코드에서 더 심오한 문제를 일으킬 가능성이 있는 프로그램 소스 코드의 특징을 가리킨다. 특징 - 애자일 프로그래머가 사용하는 용어이기도 하다 - 코드 스멜인지 아닌지의 여부를 결정하는 일은 주관적 - 자동으로 특정한 종류의 코드 스멜을 확인하기 위한 도구들이 있으며, 그 예로는 체크스타일, PMD, 파인드벅스 등 점점 안 좋은 단어만 많이 알아가는 기분이다 ㅋㅋㅋ 출처 https://ko.wikipedia.org/wiki/%EC%BD%94%EB%93%9C_%EC%8A%A4%EB%A9%9C 코드 스멜 - 위키백과, 우리 모두의 백과사전 ko.wikipedia.org

Android 인증서 관련 문제 발생 시 참고한 사이트

[이슈] 서버 인증서 갱신 시점에서 구단말에서 최신 서버인증서를 통한 인증이 수행되지 않아 javax.net.ssl.SSLHandshakeException 발생하며 서버 연동하지 못하는 이슈 발생 [도움]아래 '12.SSL 인증서 확인 사이트 - HiSEON'에서 인증서 추적하여 도움받았다. :-)bbb 진짜 막막했는데 관련 모든 사이트 감사드리며ㅠㅠ 추후 더 공부하여 포스팅하겠습니다. 1. 인증서 파일 형식 및 확장자의 차이점 비교 설명 (Certificate file format & extensions) | Knowledge Logger https://www.letmecompile.com/certificate-file-format-extensions-comparison/ 인증서 파일 형식 및 확장자의..

Study Programming 2022.05.23

Stateless protocol (무상태 프로토콜)

Stateless protocol (무상태 프로토콜) : 어떠한 이전 요청과도 무관한 각각의 요청을 독립적인 트랜잭션으로 취급하는 통신 프로토콜 - Ex) 인터넷의 기반이 되는 토콜(IP)과 월드 와이드 웹의 데이터 통신의 토대가 되는 HTTP - 통신이 독립적인 쌍의 요청과 응답을 이룰 수 있게 하는 방식 - 서버가 복수의 요청 시간대에 각각의 통신 파트너에 대한 세션 정보나 상태 보관을 요구하지 않는다. cf) 상태 프로토콜(stateful protocol) : 서버의 내부 상태 유지를 요구하는 프로토콜 출처 - 위키백과 : https://ko.wikipedia.org/wiki/%EB%AC%B4%EC%83%81%ED%83%9C_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C

Git 브랜치 합치기 : Merge, Rebase, Rebase의 활용 및 위험성

Git 에서 특정 한 브랜치에서 다른 브랜치로 합치는 방법으로는 두 가지가 있다. #1) Merge #2) Rebase - Rebase를 하든지, Merge를 하든지 "최종 결과물은 같고 커밋 히스토리만 다르다는 것이 중요하다!! #1 Merge - $git merge 명령어를 사용 - Merge 의 경우, 두 브랜치의 최종결과만을 가지고 합친다. - 이외 Merge는 브랜치 포스팅 참조 - [Merge 과정] * 아직 커밋하지 않은 파일이 Checkout 할 브랜치와 충돌 나면 브랜치를 변경할 수 없으므로 워킹 디렉토리 정리 후 Merge작업을 시작한다. 1) $ git checkout : 다른 브랜치(B) 내용을 병합할 브랜치(A)로 이동 2) $ git merge : 다른 브랜치(B)를 병합할 브랜..

Git Remote 연동하기2 - Push, Pull, 리모트 브랜치 삭제

Remote 저장소에 '로컬 수정사항/로컬 브랜치' 올리기 : $ git push : 로컬의 브랜치(LocalBranchName)를 Remote 서버로 전송 - 로컬의 브랜치를 서버로 전송하려면 쓰기 권한이 있는 리모트 저장소에 Push 해야 한다. - $ git commit 과 $git push 비교 : Git은 local repository가 있기 때문에, Git 에서의 commit은 local repository에 저장되는것을 의미하고, 이 커밋사항을 Git remote repository에 저장하려면 push를 해주어야 한다. 1. 로컬 브랜치의 이름과 리모트 서버의 브랜치 이름이 다를 때 : $ git push origin : - 리모트 저장소에 로컬의 브랜치(LocalBranchName) 이름..

Git Remote 연동하기1 - Refs, Tracking branch

리모트 Refs (Remote References) 일단, "Refs"란?? - Git은 모든 'history'를 'Key-Value format'으로 관리한다. ㄴ> 'Key'는 'SHA-1로 만들어진 40자리 해시값'이나 이를 기억하기 어렵기 때문에 "쉬운 이름의 파일"에 해시값이 저장한다. 이런 파일들을 "References"라고 하며, 약자로 "Refs"라고한다. - Git에서 "Refs"는 '.git/refs'에 저장된다. ㄴ> '.git/refs/heads' 디렉토리 내에는 main와 branch파일들이 있다. - Git에서 "어떤 특정한 작업을 가르키는 Refs"를 "branch"라고 한다. 리모트 Refs (Remote references) 란? : 리모트 저장소에 있는 포인터인 레퍼런스...

Git 브랜치(Branch) 워크플로 - Long-Running Branch, Topic Branch

workflow에 따라 Git의 브랜치를 2개로 나누어 살펴볼 수 있다. 1. Long-Running 브랜치 : 개발을 진행하고 안정화할 브랜치를 추가 후 안정화가 됐을 때 '안정 브랜치(ex 'main 브랜치')'로 Merge할 브랜치 = 즉, main 브랜치에 merge되지 않은 활성화되어 있는 개발용 브랜치 - 이 브랜치는 언젠가 안정 상태가 되겠지만, 항상 안정 상태를 유지해야 하는 것이 아니며, 테스트를 거쳐서 안정적이라고 판단되면 main 브랜치에 Merge 한다▼ 즉, 배포했거나 배포할 코드만 main 브랜치에 Merge 해서 안정 버전의 코드만 main 브랜치에 둔다. - ex) 토픽 브랜치(앞서 살펴본 addQnA 브랜치 같은 짧은 호흡 브랜치)에도 적용할 수 있는데, 해당 토픽을 처리하..

Git 브랜치(Branch)다루기3 - 충돌(Conflict) 기초

충돌(CONFLICT)의 기초 "충돌(CONFLICT)이 발생했다" = Merge하는 두 브랜치에서 같은 파일의 한 부분을 동시에 수정하고 Merge하면, Git은 해당 부분을 Merge 하지 못하는(=Merge가 실패) 경우 "충돌이 발생"했다고 말한다. - 충돌이 발생하면 $ git merge 명령어에서 아래와 같은 충돌 메시지 출력한다. $ git merge iss53 Auto-merging index.html CONFLICT (content): Merge conflict in index.html Automatic merge failed; fix conflicts and then commit the result. - 3-Way Merge 시 충돌이 발생하면 Merge 하지 못하므로 Merge 커밋이..