728x90

 

 

stack & heap의 쓰레기값(garbage value)

변수 아무 값도 넣지 않고 선언만 해뒀을 경우, 컴퓨터가 랜덤값을 넣어놓는데 이 값을 의미함

 

쓰레기값은 스택에서 발생

다시말해서, 스택에 공간 만들어두고 아무 값도 넣지 않는다면(초기화를 하지 않는다면) 어떤 값도 들어가 있을 수 있다

 

new를 연산자를 만들어서 heap 메모리 영역에 공간을 생성 했지만, 초기화를 하지 않아 값을 넣은 적이 없지만 값은 들어가 있게된다. 이때 들어가 있는 것이 쓰레기 값(garbage value)이다. 

 

※ 변수는 초기화 해둘 것을 권장!

변수를 선언만 하면 메모리에 있던 쓰레기 값이 변수 선언과 함께 생성되기 때문에 후에 문제의 원이 될 수 있는데, 

쓰레기값을 전에 다른 프로그램에서 사용하고 있었다면, 그 프로그램이 종료되었더라도 실제 메모리에 저장되었던 데이터가 남아 있기 때문에 변수를 초기화 하지 않으면 에러가 발생할 수 있다

728x90
반응형
728x90

 

코드리뷰시 자주 등장하는 코딩 용어(약어) : DRY, KISS, YAGNI

 

1.DRY(Don’t Repeat Yourself)

특정한 지식,의도,로직 등이 다양한 곳에서 다양한 형태로 계속 반복되게 하지마라

시스탬 내에서 특정한 지식과 로직은 단 한 곳에서 명확하고 신뢰할 수 있도록 존재해야함

코드(code), 기능(functionality), 로직(logic) 등이 반복적으로 나타나는 경우 반복을 피하라

↔ WET(Write Everything Twice, Waste Everyone’s Time)

 

why?

수정해야할 시, 반복되는 코드 전부를 하나씩 다 찾아서 수정해야하고 실수해서 한군데 빠뜨린다면 유지보수는 헬일 것

 

 

DRY

WET

 

 

2.KISS(Keep It Simple, Stupid)

대부분의 시스템은 복잡하기보다는 심플하게 만들어졌을 때, 최고로 잘 작동한다

시스템 디자인 시, 심플함이 주 목표이 되어야하고 불필요한 복잡성은 피해야한다

별도의 주석 없이도 함수명, 매개변수, 구현된 코드를 읽었을 때 한번에 이해할 수 있도록 1가지의 기능을 수행하는 함수를 심플하게 작동하는게 좋다

ex)10줄 코드를 1줄 코드로 바꾸기 위해, 화려한 테크닉을 이용하여 가독성을 떨어뜨리기 보다는 누구나 이해할 수 있게 심플하고 간결하게 작성하는게 좋다

  • 1가지의 책임만 담당하는 클래스 작성이 좋다
  • UI를 담당하는 컴포넌트에는 별도의 비지니스 로직을 포함하지 않고, 최대한 심플하게 UI 관련 로직만 담당해야함
  • 서비스를 만들 때도, 여러가지 기능을 복잡적으로 담당하는 하나의 큰 서비스를 만들기 보다 단 하나의 기능을 담당하는 개별적인 심플한 서비스를 만드는 것이 좋다
  • 위의 것들을 통해서 전체적인 시스템을 KISS하게 심플하게 제작가능

 

3.YAGNI(You Ain’t Gonna Need It)

필요없는 기능을 작성하지마라

필요한 기능만 초점을 두고 코드를 디자인해야함

  • 필요하지 않은 기능 x
  • 사용하지 않는 기능 x
  • 지나지체 미래지향적 x

앞으로 필요할 것 같은 것을 지나치게 만들거나 염두해두는 코드들은 필요x

시스템에 불필요한 ‘복잡성’을 더 하지 않는 선에서 코드 디자인하라는 의미

 

※ 필요 없어진 코드는 주석처리보다 Git으로 브랜치를 나눠서 기능별로 버젼관리로 저장해두는 것을 추천

 

자료 출처 : https://www.youtube.com/watch?v=jafa3cqoAVM&t=286s

 

728x90
반응형
728x90

 

1.캐멜 케이스 (Camel Case)

String camelCase;

첫글자는 소문자지만 중간 단어들의 첫음절을 대문자로 하여 각 단어를 알아보기 쉽게한다

낙타(camel) 혹같이 튀어나와보인다 해서 캐멀 케이스

 

2.스네이크 케이스(Snake Case)

단어 사이에 언더바(_)로 구분해주는데 뱀이 구불구불 기어가는 모양 같다고 하여 스네이크 케이스라 부른다

String snake_case;

 

3.파스칼 케이스(pascal case)

String PascalCase;

첫글자부터 대문자로해서 단어마다 대문자로 작명하는 경우를 파스칼 언어의 표기법과 비슷해 보인다하여 파스칼 케이스라 부른다

728x90
반응형
728x90

플래그(flag) 변수

 

로직 흐름을 제어할 사용하는 변수. 제어 플래그(control flag)라기도 하며,

boolean 데이터타입으로 토글 기능에 사용하기도

 

1)false true 뒤집기

2)flag 이용하여 종료 제어하기

 

 

 

프로그래밍에서는 상태를 기록하고 처리 흐름을 제어하기 위한 boolean타입 변수를 의미

참과 거짓을 나타내주는 플래그

 


 

boolean 타입의 변수 명은 가독성을 위해서 주로 아래와 같다.

  • isAnswer
  • isSuccess
  • isTrue
  • flag

그 외에도  관용적으로 사용하는 "flag" 라는 변수명을 사용하기도

 

※ 참/거짓을 구분하는 방법은 여러가지가 있을 것입니다. 1과 0으로 표기를 해도 되고, T와 F의 문자로 구분을 할 수 도 있겠지요. 그런데 왜 boolean 타입의 변수를 사용할까요?

boolean의 크기는 대략 1byte로 가장 작고, 가독성과 편의성을 위하여 사용하는 경우가 많습니다.

 

출처: <https://wikidocs.net/119689>

728x90
반응형
728x90

빌드(Build)

빌드가 왜 필요한지 먼저 알아보자

아래는 개발자들의 프로그래밍 작업화면이다

개발자들이 작업하는 코드들은 양이 엄청나서 여러 폴더들도 이루어져 작동하게 된다

일반적으로 수십,수백개가 넘는 폴더와 파일들로 하나의 프로그래밍이 완성된다

직접 작성한 소스코드, 라이브러리, 이미지파일, 기타 프로그램에 필요한 파일들로 구성된다

완성된 프로그램을 출시할 때는, 이 파일들을 날 것 그대로가 아닌 포장해서 내보내게 되는데 이를 빌드라고 한다

 

빌드하는 목적

윈도우확장자인 .exe파일처럼 파일 하나로 제공하기 위해서

프로그래밍 코드들을 압축해서 전체 크기를 줄이기 위해서

다른 사람들이 코드를 못알아보도록 난독화 하기 위해서

 

컴파일 언어의 경우 빌드에 컴파일 작업이 포함되어있다

프로그래밍 언어마다 소프트웨어 종류마다 빌드 결과가 다양하다

파일 하나로 압축되기도 하고, 많은 수의 파일들이 적은 수의 파일들로 정리되기도 하고, 파일들의 형식과 내용만 바뀌는 경우도 있다

 

빌드란?

작업하는 프로젝트 파일들을 출시하기 적합한 형태로 포장하는 일

 


 

 

배포

코딩해서 빌드한 결과물을 유저에게 전달하는 과정

 

유저들이 다운 받을 수 있는 곳에 업로드해야 하는데

데스크탑이면, 네이버, 공식홈페이지 등등

모바일이면, 구글 플레이스토어, 애플 앱스토어 등

웹사이트라면, 작업물을 서버에 올리고 실행해서 해당 사이트 도메인에 유저들이 접근할 수 있게 하는 작업

 

 

출처

https://www.youtube.com/watch?v=GYmuQJiPeM4

 

728x90
반응형
728x90

 

환경변수(Environment Variable)

'환경'이라는 단어는 컴퓨터에서 소프트웨어가 동작하는 공간을 의미

환경 변수는 컴퓨터마다 지정된 값

환경이라는 방 안에 칠판이 있고 그 안에 변수들이 적힌 것

 

환경변수의 용도

1.경로에 상관없이 파일을 찾게해줌

코드로 각 집에 '영어사전을 ${서재}에 꽂으세요'라는 코드를 보내면,

철수네는 서재가 아버지방에

영희네는 서재가 거실에 있는데

이 '서재'라는 환경변수에 집별로 적절히 들어간 값 때문에 어느 집에서든지 이 명령어로 올바른 곳에 사전을 꽂을 수 있게됨

 

자바를 설치 한 직후 환경변수를 세팅하는 것도 자바가 어디에 있던지 문제 없이 자바를 찾아 실행할 수 있게 하기 위함

 

2.

집의 ${건물종류}가 전원주택이면 잔디를 깎으세요

각 환경의 조건마다 어떤 동작을 실행할지 정할 수 있다

 

개발 할 때 보통 개발용과 배포용으로 나누어서 파일을 관리한다 

개발자가 디버깅을 쉽게하기 위해서 어떤 정보들을 뜨도록 할 수 있는데 이게 유저들이 사용할 때도 뜨면 곤란할 것이다

그렇다고 배포할 때마다 해당 코드들을 지우기도 일이 많아지기에,

개발하는 컴퓨터와 제품이 배포될 서버 등에 각각 환경변수 값을 위의 이미지처럼 따로 설정해주고 조건을 주면 개발용 컴퓨터에서만 디버깅 정보가 나타날 수 있음

 

3.

비밀번호를 철수나 영희네 집 둘 중 하나만 보내더라도 환경변수를 사용해서 코드를 작성해야함

이렇게 하지 않으려면 코드에 직접 비밀번호를 적어야하는데 비번 노출 위험이 커지기 때문에 환경변수를 쓰는 것

특히, 오픈소스로 공개되는 코드들에는 이런 보안요소들이 공개되면 위험

 

환경이란 컴퓨터가 돌아가는 전체 환경 뿐만아니라

도커의 컨테이너 같이 프로세스가 돌아가는 보다 세분화된 공간을 의미하기도 한다

 


 

라이브러리(Library) & 프레임워크(Framework)

특정 기능이 함수나 클래스 등의 형태로 제작되어 공개된 것을 가져다가 내 프로그램에 사용될 수 있는 것

모듈화된 코드 또는 그 묶음들을 라이브러리

 보통 다른 사람이 만들지만 내가 만들 수도 있고 어떤 소프트웨어든 

집을 지을 때, 집을 짓는데 사용되는 자재가 라이브러리라면, 프레임워크는 기본 골격을 갖춘 집 조립키트

컴퓨터 조립으로는, 마더보드가 프레임워크고 거기에 끼워넣는 각 파치들을 라이브러리라고 할 수 있다

 

라이브러리

ex)math, 텐서플로우, 판다스 등

프레임워크

ex)스프링, 장고, .NET, 라라벨, Express, Vue

 

 

출처

https://www.youtube.com/watch?v=GYmuQJiPeM4

728x90
반응형
728x90

 

 

디버깅(Debugging)

어원의 유래

초창기 컴퓨터에는 벌레(bug)가 들어가서 고장이 잘 났었는데,

이때 벌레(bug)를 찾아 치우는 일에서 디버깅(debugging)이라는 말이 유래됬다고함

 

코드가 길고 복잡해지면 머릿 속에서 다 둘러볼 수 없기에 코드의 일정 단계별로 

확인할 수 있도록 하나씩 찾아보게된다

여러 프로그래밍 개발에 유용한 툴들인 vs code, IntelliJ 등에는 모두 디버깅 기능이 있다

 

1.소프트웨어에 문제가 생긴 것을 잡는 것

의도치 않은 상황에 자주 마주치게 되고, 코딩 중 상당한 시간이 디버깅에 할애된다

2. 개발중

배포라는 의미와 대비되서 아직 완성되지 않은 상태의 개발중이라는 의미로도 쓰인다

 


 

컴파일러(Compiler) & 인터프리터(Interpreter)

컴퓨터 언어는 0과 1로 구성되어 있다. 

사람이 0과1로만 ㄱㄴㄷㄹ를 하나씩 다 한다고 상상해보자 정말 헬일 것이다.

쉽게 해석가능하다면 컴퓨터와 친구하자

 

컴퓨터의 언어를 사람이 알 수 있게 

사람의 언어를 컴퓨터가 알 수 있게 또는 그 중간 단계로 변역해주는 작업과정에서

미리 해놓으면 컴파일러

실행할 때마다 통역하면 인터프리터

 

프로그래머들은 이런 특성을 고려해서 자신들이 만들려는 프로그램의 언어를 선택한다

 

컴파일 언어

번역 프로그램인 컴파일러가 사람이 작성한 소스코드를 사전에 번역 해놓는 것

이렇게 미리 컴파일 해놓는 컴퓨터언어들을 컴파일 언어라고 부른다

ex) C,C++ 등

 

인터프리터 언어(=스크립트 언어)

장점 : 코드 수정이 잦은 서비스의 경우 업데이트가 용이

단점 : 컴파일언어에 비해 느리다, 프로그래머가 짠 코드가 그대로 배포되어 사용되기에 코드가 보다 쉽게 노출되기 쉽다

ex) 자바스크립트,파이썬,루비 등

 

 

 

출처

https://www.youtube.com/watch?v=GYmuQJiPeM4

728x90
반응형
728x90

절대경로(Absolute Path) & 상대경로(Relative Path)란?

 

리눅스,html 등등 여러곳에서 볼 수 있다고 하며,

필자는 주로 VS code 사용하면서 이 개념들이 나와서 궁금해서 

알아보게 되었다

 

 

1.절대경로(Absolute Path)

전체 경로를 기입하는 방식

c,d드라이브 같은 최상위 디렉토리까지 모두 포함된 경로

OS에서는 절대경로로만 인식이 가능

ex) D:\Dropbox\Developer\python\Workspace_Python\hello world.txt

 

 

2.상대경로(Relative Path)

현재 자신이 속한 디렉토리를 기준으로 작성된 경로

말그대로 상대적인 경로라 비교할 대상이 있어야하며 그 비교대상은 자신이 속한 디렉토리 

컴퓨터 안에서 기준이 되는 경로를 중심으로 절대경로가 구성되는 개념

OS가 상대경로를 인식할 수 있는건 기준이 되는 경로가 상대경로를 절대경로로 변환하여 OS에 전달하기 때문

ex) Workspace_Python\hello world.txt

    or ./../../ Workspace_Python\hello world.txt 식으로 /과.으로 앞 경로들이 생략된다

 

 

※ 상대경로 개발배경 ※

지정하고자 하는 파일의 경로가 자주 변경되는 상황이거나 루트 디렉토리가 서로 다른 OS을 다룰 경우,

매번 새로 경로지정을 해줘야 한다. 바꿔야할 양이 많다면 한숨이 절로 나올 것이다...

리눅스 같은 경우에는 윈도우와 달리 특정 디렉토리 액세스 할 때마다 풀경로를 다 적어줘야 한다고한다.

 

 

728x90
반응형

+ Recent posts