지식 공유 📚

    [Linux] yum, apt-get 차이

    OS 종류 OS 는 크게 Windows, Linux, Unix, MacOS 4가지로 분류됩니다. Linux 종류 Linux 는 크게 레드햇, 데비안, 우분투 3가지로 분류되며, 계열에 따른 패키지 관리 명령어가 다릅니다 레드햇 계열은 yum 을 사용하고 레드햇 엔터프라이즈 페도라 CentOS 데비안, 우분투 계열은 apt-get 을 사용합니다.

    [Linux] wget, curl 차이

    wget vs curl wget 과 curl 은 둘 다 웹 서버로부터 컨텐츠를 가져오는 Linux 커맨드입니다. wget 과 curl 은 거의 유사하지만 조금 다른 부분이 있습니다. 공통점 HTTP, HTTPS, FTP 프로토콜을 통해 컨텐츠를 다운로드 하는 커맨트 라인 툴입니다. HTTP POST request 를 지원합니다. (즉, 웹사이트로 데이터를 전송할 수 있습니다.) HTTP 쿠키를 지원합니다. 스크립트처럼 사용자 인터렉션없이 수행될 수 있도록 설계되었습니다. 오픈소스이며 무료입니다. 90년대에 시작한 프로젝트입니다. (wget 은 1995년, curl 은 1996년에 시작했습니다.) metalink 를 지원합니다. 차이점 wget 간단하고 직관적입니다. 별도의 라이브러리를 지원하지 않습니다...

    [Spring] 트랜잭션의 propagation 설정별 동작

    이 글은 DevEric 님의 글을 참고하였습니다. 트랜잭션의 propagation 설정이란 Spring에서 사용하는 어노테이션 '@Transactional'은 해당 메서드를 하나의 트랜잭션 안에서 진행할 수 있도록 만들어주는 역할을 합니다. 이때 트랜잭션 내부에서 트랜잭션을 또 호출한다면 스프링에서는 어떻게 처리하고 있을까요? 새로운 트랜잭션이 생성될 수도 있고, 이미 트랜잭션이 있다면 부모 트랜잭션에 합류할 수도 있을 것입니다. 진행되고 있는 트랜잭션에서 다른 트랜잭션이 호출될 때 어떻게 처리할지 정하는 것을 '트랜잭션의 전파 설정'이라고 부릅니다. 전파 설정 옵션 트랜잭션의 전파 설정은 '@Transactional'의 옵션 'propagation'을 통해 설정할 수 있습니다. 각 옵션은 아래와 같습니..

    [Java] try ~ catch문을 이용하여 예외처리 하기

    Sims님의 글을 참고하였습니다. 프로그래밍을 하다 보면 다양한 오류가 발생하기 쉽습니다. 가장 대표적인 예로는 file을 읽으려고 했는데 해당 file이 없는 경우, 0으로 나누는 경우 등등.. 쉽게 접할 수 있는 오류들이 많이 있죠. 이러한 오류를 처리하는 것을 '예외 처리'라 볼 수 있습니다. 그럼 어떻게 예외 처리를 할 수 있는지 살펴보도록 합시다. 예외처리 != 버그 자, 일단 오류를 분류해 봅시다. 위에서 간단하게 2가지 오류를 말씀드렸습니다. 첫 번째는 파일이 존재하지 않는 경우, 두 번째는 0으로 나누었을 때 오류입니다. 둘 다 오류지만 자세히 살펴보면 특징이 조금 다릅니다. 첫 번째, 파일이 존재하지 않는 경우의 오류는 프로그래머가 예상을 하고 예외 처리를 해줘야 하는 경우입니다. 즉, ..

    [JSP] <c:forEach> varStatus 활용법

    // 반복해서 표시할 내용 혹은 반복할 구문 이 때, 상태용 변수를 status라고 지정했다면 아래와 같이 활용할 수 있다. ${status.current} 현재 for문의 해당하는 번호 ${status.index} 0부터의 순서 ${status.count} 1부터의 순서 ${status.first} 첫 번째인지 여부 ${status.last} 마지막인지 여부 ${status.begin} for문의 시작 번호 ${status.end} for문의 끝 번호 ${status.step} for문의 증가값 활용 예 / 읽어주셔서 감사합니다.

    [Java] 자바 static의 의미와 사용법

    정적(Static)이란? 정적(static)은 고정된이란 의미를 가지고 있습니다. Static이라는 키워드를 사용하여 Static변수와 Static메소드를 만들 수 있는데 다른말로 정적필드와 정적 메소드라고도 하며 이 둘을 합쳐 정적 멤버라고 합니다. (클래스 멤버라고도 합니다.) 정적 필드와 정적 메소드는 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버입니다. 그렇기에 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할때 클래스별로 관리됩니다. 따라서 클래스의 로딩이 끝나는 즉시 바로 사용할 수 있습니다. 정적(Static) 멤버 생성 Static 키워드를 통해 생성된 정적멤버들은 Heap영역이 아닌 Static영역에 할당됩니다. Static 영역에 할당된 메모리는 모든 객체가 공..

    왜 개발자는 잘못된 기술 선택을 밥 먹듯이 하나?

    개발 이슈가 대부분 그렇지만, 기술적인 측면보다 의외로 의사소통 문제 같은 인적 요소가 원인이 될 때가 많습니다. 캐리 플리첼은 "왜 개발자는 잘못된 기술 선택을 밥 먹듯이 하나?"라는 제목의 블로그 게시글에서 그 원인을 다섯 가지로 분류했습니다. 하나씩 알아보겠습니다. 이 글은 왜 개발자는 잘못된 기술 선택을 밥 먹듯이 하나? 와 Optimizing Java 라는 서적을 참고하여 작성하였습니다. 지루함 개발자는 대부분 자기 역할에 지루함을 느끼고 뭔가 새롭고 도전적인 일을 찾아 같은 회사 또는 아예 다른 곳으로 떠날 궁리를 하는 사람도 있습니다. 하지만 사내에 딱히 마땅한 기회가 없거나 다른 회사로 이직하는 게 여의치 않을 때도 있겠죠. 물론, 지루한 일상을 잘 참고 견딜 뿐만 아니라 외려 더 쉽고 편..

    [Java] 인터페이스와 추상클래스

    추상클래스는 abstarct를 사용하고 인터페이스는 interface를 사용하면 구현할 수 있습니다. 하지만 언제 추상클래스를 사용하고 언제 인터페이스를 사용해야 할까요? 아마 많은 주니어 개발자분들이 명쾌한 답을 내놓지 못할 것이라고 생각합니다. 저 또한 추상클래스와 인터페이스의 적절한 사용 용도를 인지하지 못한 채 개발을 해왔습니다. 그래서 이번에 추상클래스와 인터페이스에 대해 알아 보고자 합니다. 추상클래스 추상클래스는 일반클래스와 별반 다를 것이 없습니다. 단지, 추상 메서드를 선언하여 상속을 통하여 자손 클래스에서 완성하도록 유도하는 클래스입니다. 그래서 미완성 설계도라고도 표현합니다. 기본적으로 아래 코드와 같이 작성하게 됩니다. public abstract class 클래스이름{ public..

    [AWS] EC2를 이용하여 Node.js 서버 배포하기

    이번 글에서는 AWS EC2를 이용하여 Node.js를 배포해보겠습니다. 우분투를 해보시지 않았다면 조금 어려운 부분이 있을 수도 있습니다. AWS EC2 시작하기 EC2 같은 경우 S3와 다르게 비용이 꽤 나옵니다. 그러므로 필요할 경우가 아니면 반드시 인스턴스를 중지해야 합니다. 아닐 경우 청구서 보고 저처럼 깜짝 놀랍니다 ㅜㅜ AWS EC2에 접속하고, 인스턴스 시작 버튼을 눌러줍니다. 우분투를 사용할 것이기에 18.04 버전의 우분투를 선택해줍니다. 인스턴스 유형 선택에서 이미지와 같이 체크하고 검토 및 시작 버튼을 눌러줍니다. 쭉쭉 넘어와서 7단계에서 보안 그룹 편집을 클릭해줍니다. 테스트용이기에 다음과 같이 구성하였습니다. 전세계 누구나 아무 곳에서 들어올 수 있습니다. 그리고 검토 및 시작 ..

    [AWS] HTTP to HTTPS로 배포하기 (S3 기준)

    이전 글 'Route 53 도메인 구매 후 연결하기'에서 도메인 구매 후 S3와 연동시켰습니다. 하지만 Http로 접속되기 때문에 이를 Https로 바꿔보는 작업을 하겠습니다. Https로 바꾸기 위해서는 S3, CloudFront, AWS Certificate Manager, Route53 을 이용해야 합니다. S3는 정적인 웹 호스팅이여서 EC2와 같은 동적인 웹 호스팅의 Https는 EC2의 Load Balancer를 이용해야 합니다. Route53에서 도메인 구매 후 S3로 배포했다는 가정하에 진행하겠습니다. AWS Certificate Manager AWS에 접속하셔서 Certificate Manager로 이동합니다. 여기서 주의할 점이 있는데 반드시 미국동부(버지니아 북부)us-east-1로 ..

    [AWS] Route 53 도메인 구매 후 연결하기

    Amazon Route 53는 높은 가용성과 확장성이 뛰어난 클라우드 웹 서비스입니다. 홈페이지 가시면 더 자세히 보실 수 있는데 이번 글에서는 도메인을 구매하여 설정하는 방법에 대해 알아보려고 합니다. 저 같은 경우 포트폴리오를 example.com 의 도메인을 가진 웹 사이트로 만들고 싶어서 카페24, 가비아 등을 알아보다가 AWS S3, EC2, RDS 등 AWS 관련한 클라우드를 사용한 적이 있어서 이번에도 AWS Route 53을 사용하기로 결정했습니다. AWS는 1년 기준 한화 15,000원(com 기준, 12$) 정도입니다. 카페24가 22,000원, 가비아가 13,500원 하는 것 같습니다. 카페24에서 .com이 등록불가능인데 이건 aws로 제가 이미 구매해서 불가능이라고 나오는 겁니다...

    [Java] 자바의 동작과정 Java Compiler와 JVM

    이클립스에서 *.java를 단축키 눌러서 실행시킬 줄만 알았지 *.java 파일이 어떠한 과정을 거쳐 실행이 되는지는 알지 못했습니다. 따라서 자바 컴파일러는 어떤 역할을 수행하며, 어디서 많이 들어본 JVM은 무엇인지 그리고 자바에서 *.java를 어떻게 컴퓨터가 실행시키는 지에 대한 과정을 알아보려고 합니다. 틀린 부분이나 질문 사항이 있으시면 언제든지 말씀해주세요 :) 전체적인 자바의 실행과정 위 그림은 전체적인 자바의 실행과정을 보여주고 있습니다. 사실 더 깊숙이 파고들면 이것보다 훨씬 많은 것들이 존재하지만, 이번 글에서는 이정도만 알아보겠습니다. 핵심키워드 *Java Compiler , *JVM , *Interpreter , *JIT compiler Java Compiler with binar..

    [CA] 바이너리 파일과 바이트 파일 그리고 컴파일, 링크

    자바의 작동원리를 공부하던 중 바이트 파일과 바이너리 파일의 개념을 숙지해야되서 관련 글을 쓰게 되었습니다. Complie과 Link C언어는 컴파일러에 의해 소스파일(*.c)이 목적파일(*.obj)로 변환될 때 바이너리 파일 , 즉 0과 1로 이루어진 코드로 변환됩니다. 목적파일은 컴퓨터가 이해할 수 있는 바이너리 코드의 형태이지만 실행될 수는 없습니다. 그 이유는 완전한 기계어가 아니기 때문입니다. *소스파일 : 개발자가 작성하는 고레벨언어인 소스코드로 구성된 파일 ex. *.java, *.py *목적파일 : 소스파일을 컴파일해서 생긴 파일 ex. 바이트코드, 바이너리 코드 컴파일러 에 의해 변환된 목적파일은 링커 에 의해 실행가능한 실행파일(*.exe)로 변환될 때 함수나 헤더 파일 등의 실제 메모..

    [JS]자바스크립트 동작의 삼위일체! - V8, Web API, Event Loop

    자바스크립트 뿐만 아니라 프로그래밍 언어를 배우면서 처음에는 그저 코드 짜기에만 급급했습니다. 그 언어의 작동원리 같은 건 봐도 도무지 이해가 안갔기에 관심이 없었습니다. 시간이 점차 흘러 우연히 자바스크립트의 작동원리 관련 글을 다시 보게되었는데 글이 어렵지 않고 이해가 되기 시작했습니다. "그때 작성했던 코드가 이래서 이런식으로 작동했구나" 를 깨달으면서 자바스크립트에 대해 더 자세히 알게 되고 나니 한층 더 코딩이 재미있어졌습니다. 그래서 이번에는 자바스크립트의 작동원리에 있어 핵심 원리인 JavasScript Engine(V8), Web API, Callback Queue, 이벤트 루프 그 중 특히 이벤트 루프 에 대해 자세히 알아보려고 합니다. 틀린 부분이나 질문 사항이 있으시면 언제든지 댓글로..

    [OS] 더 이상 어버버하지말자!! 스레드와 프로세스

    누군가 저에게 프로세스와 스레드의 차이점에 대해 물었던 적이 있었는데, 명확하게 대답을 못한게 너무 아쉬워서 이 참에 확실히 공부하고 넘어가려 이 글을 쓰게 되었습니다. 개념들이 파고파고 들면 밑도 끝도 없는 것 같아서 이 글을 이해하는데 있어 굳이 불필요한 개념들에 대해선 언급하지 않겠습니다. 프로세스와 스레드는 무엇일까? #프로세스(Process)란? 프로세스가 무엇인지 파악하기 전에 프로그램이란 무엇인지 파악할 필요가 있습니다. 프로그램이란 단어는 컴퓨터전공자가 아니여도 대부분의 사람들이 많이 들어봤을 것이고 실제로 사용도 하는 단어일 것입니다. 프로그램 은 어떤 작업을 실행할 수 있는 파일을 의미합니다. 바탕화면에 LoL.exe , Visual Studio.exe 같은 파일들이 있는데 이것들이 프..

    [Python] list(리스트)의 얕은 복사와 깊은 복사

    리스트 복사하기 변수는 객체를 담는 그릇이 아니라 객체를 가리키는 이름입니다. 따라서 변수를 다른 변수에 대입하면 두 변수는 같은 객체를 가리키게 됩니다. 다시 말해, 하나의 객체를 두 개의 이름이 가리키는 것이지 객체 자체가 두 개가 된 것은 아닙니다. 그렇기 때문에 불변형 객체immutable object에서는 한 변수에 새 데이터를 대입해도 다른 변수에 영향을 미치지 않지만, 리스트 같은 변형 객체mutable object에서는 그렇지 않습니다. 이는 장점이 되기도 하고, 단점이 되기도 합니다. 우선 여기까지 코드로 확인해 보겠습니다. >>> mu_a = [2020, 'year'] >>> mu_b = mu_a >>> mu_b.append(['hi', 'hello']) >>> mu_a [2020, '..

    [Node.js] uuid 라이브러리 설치 및 사용하기

    UUID는 Universally Unique IDentifier의 약자로, 전세계에 하나밖에 없는 ID라는 뜻입니다. 이런 ID는 고유하기 때문에 서버에서 사용자들에 UUID를 붙여서 구분하는 등 여러 방면에서 유용하게 쓰일 수 있습니다. UUID가 겹치면 어쩌지? 이 글은 koreanhole 님의 글입니다. Intro 최근 UOS공지사항 앱의 백엔드 시스템을 교체하는 작업을 하고 있습니다. 기존 Firebase의 Firestore를 사용하고 있었는데 이번에 새롭게 Nestjs로 서버를 작성하는 kingofbackend.tistory.com 설치 $ npm install uuid uuid 라이브러리를 install 합니다. 종류 UUID는 여러 가지 방식으로 생성 가능합니다. v1: 타임스탬프(시간) 기..

    Node.js에 관한 10가지 후회 - 라이언 달과 Deno.js

    Node.js를 개발한 라이언 달(Ryan Dahl) 은 지난 2018년 6월 Javascript 최대 콘퍼런스인 JSConf 2018에서 10 Things I Regret About Node.js 을 발표하였습니다. 그 후 Node.js를 개발하면서 생겼던 후회를 바탕으로 새로운 서버 사이드 런타임인 Deno.js를 발표하였습니다. (Node에서 de를 no 앞에 쓴건데 이거 눈치채고 소름이.. ) 라이언 달은 Node.js 만들면서 이벤트 기반 HTTP 서버(Event driven HTTP server)에 상당히 많은 심혈을 기울였습니다. 실제로 Node.js를 만들때 가장 중요하게 생각했던 것이 이벤트 기반 HTTP 서버라고 합니다. 이에 대해서는 여전히 Node는 좋은 서버 사이드 런타임이라고 말..

    [JavaScript] 기다려! 먹어! async/await 이해하기

    우리는 뭉치에게 기다려! 먹어! 훈련을 교육시키고 싶습니다. 뭉치의 다리에 간식을 올려놓고 먹어!라고 했을 경우 뭉치가 간식을 먹었으면 하는데 뭉치는 주인의 명령을 기다리지 않고(비동기 방식 문제) 제멋대로 간식을 먹어버렸습니다...뭉치에게 훈련(일반 콜백함수)을 시켜보았지만 여전히 뭉치는 말을 듣지 않습니다. 뭉치는 말못하는 강아지라 혼낼 수도 없고 우리는 난처한 상황에 빠져버렸습니다ㅠㅠ 그래서 우리는 더 쉬운 훈련방법(async/await)으로 뭉치를 교육시키고자 합니다!! # 비동기와 동기 자바스크립트를 사용할 때 가장 신경써야 하는 부분 중 하나가 동기와 비동기 처리입니다. 분명 로직은 맞게 짠거 같은데 결과값이 undefined 이거나 알수 없는 에러가 발생할 경우 십중팔구 비동기 문제를 의심해..

    [Server] 로드밸런서(Load Balancer)는 왜 필요할까?

    우리는 데이터 속에 살고 있다해도 과언이 아닐만큼 과거에 비해 다양한 데이터들이 기하급수적으로 늘어났으며, 데이터 하나하나가 기업이나 개인의 모두 소중한 자산 입니다. 우리는 데이터 없인 살 수 없고, 앞으로도 그럴 것입니다. 데이터가 방대해지면서 아무리 좋은 서버라고 해도 이를 수용하는데 있어 무리가 있습니다. 그에 따라 규모가 큰 서비스를 제공하는 회사의 경우 여러 대의 서버를 두고 동일한 데이터를 저장하여 수많은 트래픽을 효과적으로 분산합니다. 수 많은 트래픽을 여러 대의 서버로 분산해줄 수 있는 기술이 없다면 트래픽은 결국 한대의 서버로 집중 될 것입니다. 그렇게 된다면 서비스 속도가 엄청나게 느려질 것이고 최악의 경우 서버가 마비되어 서비스 자체를 제공할 수 없게 될 것입니다. 이러한 경우에 대..

    [Linux] OpenSSH 서버 구축하기

    이번 글에서는 원격으로 서버에 접속하게 해주는 OpenSSH 서버에 대해 알아보도록 하겠습니다. OpenSSH 서버는 텔넷 서버와 기능이 동일하다고 볼 수 있으나 보안상 안전하지 못했던 텔넷에 비해 OpenSSH는 훨씬 안전하다고 볼 수 있습니다. OpenSSH는 데이터 전송 시 암호화 한다는 차이점이 있습니다. # OpenSSH 서버를 구축해보자 저는 VMware workstation 환경에서 서버를 구축할 것입니다. 들어가기 앞서 SSH 서버의 패키지 이름은 "openssh-server" 이고 서비스(데몬) 이름은 "sshd"입니다. rpm -qa openssh-server 명령어로 현재 설치되어 있는 openssh-server를 확인해줍니다.(CentOS는 기본적으로 openssh를 제공해준다고 합..

    [shell] 셸 스크립트 for문과 while문 반복문

    !/bin/sh hap=0 for i in 1 2 3 4 5 6 7 8 9 10 do hap=`expr $hap + $i` done echo "1부터 10까지의 합:"$hap hap2=0 for((i=0;i

    [shell] 셀 스크립트 함수 사용하기

    사용자 정의함수 #!/bin/sh myFunction(){ echo "함수 안으로 들어왔음" return } echo "프로그램을 시작합니다." myFunction echo "프로그램을 종료합니다." exit 0 함수의 파라미터 사용 #!/bin/sh sumFunction(){ echo "$1 $2 개의 합은 `expr $1 + $2` 입니다" } echo "파라미터는 $1 와 $2 입니다" sumFunction $1 $2 #!/bin/sh myFunction(){ result=`expr $1 + $2` return "$result" } temp=$(myFunction 1 2) echo $? export 외부 변수로 선언합니다. 즉, 선언한 변수를 다른 프로그램에서도 사용할 수 있게 합니다. #!/bin..

    [shell] 셸 스크립트 if문과 case문

    #if 문 if [ 조건 ] then 참일 경우 실행 fi *주의할점 : '[ 조건 ]' 사이의 각 단어에는 모두 공백이 있어야 함 if [ 조건 ] 대산 if test 도 가능 #!/bin/sh if [ "woo" = "woo" ] then echo "참입니다" fi if test "woo1" = "woo1" then echo "참2입니다" fi exit 0 조건문에 들어가는 비교 연산자 문자열 비교 결과 "문자열1" = "문자열2" 두 문자열이 같으면 참 "문자열1" != "문자열2" 두 문자열이 같지 않으면 참 -n "문자열" 문자열이 NULL이 아니면 참 -z "문자열" 문자열이 NULL이면 참 산술 비교 결과 수식1 -eq 수식2 두 수식이 같으면 참 수식1 -ne 수식2 두 수식이 같지 않으면..

    [Server] 리눅스 커널(kernel)이란?

    리눅스에 대한 매우 초보적인 글이므로(제가 리눅스 초보이기에 ㅠㅠ) 숙달된 개발자분들에게 매우 쉬운 글일 수도 있습니다. 틀린 부분이 있으면 언제든지 지적해주세요 :) '리눅스 커널'과 '커널'을 혼용해서 사용하였지만 둘이 같다고 보셔도 무방합니다. 많은 사람들이 운영체제와 커널에 큰 의미 차이를 두지 않고 사용합니다. 저 또한 커널을 그냥 운영체제라 생각하고 둘을 혼용해서 사용했습니다. 하지만 의미가 같다면 굳이 이름을 다르게 해서 부를 필요가 없었을 것입니다. # 컴퓨터에서 커널까지 컴퓨터는 크게 하드웨어 와 소프트웨어 로 나뉩니다. 이 둘은 컴퓨터에 대한 지식이 없어도 쉽게 구별하실 수 있을 것입니다. 하드웨어는 눈에 보이고, 손으로 만질수 있는 것들 예를 들면 모니터, 데스크톱, CPU 등이 될수..

    [Python] sort()에서의 key lambda 사용하기

    파이썬의 sort() 함수는 오름차순으로 정렬해주는 함수입니다. 문자열 또한 오름차순으로 정렬이 됩니다. sort(reverse=True) 또는 reverse()를 이용하여 내림차순으로도 구현이 가능합니다. 이 글에서는 key 매개변수를 가지는 sort()에 대해 알아보겠습니다. key 매개변수를 가지는 sort() 함수는 key 값을 기준으로 정렬되고 기본값은 오름차순입니다. 또한 lambda식을 사용할 수 있습니다. 백준 1181번 문제를 예시로 들어보겠습니다. 이 문제 같은 경우 sort(key)를 이용하여 쉽게 구할 수 있습니다. data_list = ['but','i','wont','hesitate','no','more','no','more','it','cannot','wait','im','yo..

    [Python] collections 라이브러리 deque, Counter

    파이썬의 collections 라이브러리는 유용한 자료구조를 제공하는 표준 라이브러리입니다. 그 중 많이 사용되는 deque와 Counter에 대해 알아보겠습니다. 파이썬에서 큐를 구현하는데 있어 Queue라는 라이브러리가 있지만 일반적인 큐를 구현하는 라이브러리는 아닙니다. 따라서 deque를 이용하여 큐 자료구조를 구현해야 합니다. 일반적으로 리스트 가장앞에 원소를 삽입할때 시간 복잡도는 O(N)입니다. 하지만 deque의 appendleft()를 사용하면 시간복잡도를 O(1)로 줄일 수 있습니다. 리스트 deque 가장 앞쪽에 원소 추가(appendleft(x)) O(N) O(1) 가장 뒤쪽에 원소 추가(append(x)) O(1) O(1) 가장 앞쪽에 있는 원소 제거(leftpop()) O(N) ..

    [Python] 순열, 조합 라이브러리 itertools

    itertools는 파이썬에서 반복되는 데이터를 처리하는 기능을 포함하고 있는 라이브러리입니다. 그 중 자주 사용되는 4가지 클래스에 대해 알아보겠습니다. 알아보기 전 공통으로 알아둘 것이 있습니다. itertools는 파이썬 외장 라이브러리 이므로 import 선언을 해주어야합니다. 만약 combinations 클래스가 필요하다면 from itertools import combinations 로 선언해주시면 됩니다. 항상 list() 를 해주어 리스트 객체로 받아야 합니다. combinations 처럼 뒤에 s 가 붙어있는지 확인해주어야합니다. product 경우는 s가 없습니다. 함수 설명 사용법 permutations iterable 객체에서 r개의 데이터를 뽑아 순서대로 나열합니다. permuta..

    [Python] 파이썬 2차원 리스트 초기화

    파이썬에는 컴프리헨션이라는 기능이 있어서 리스트(배열)를 초기화 하는데 있어서 코드량을 많이 줄일 수 있습니다. 그리고 파이썬에서 2차원 리스트를 초기화 할때는 반드시 컴프리헨션을 사용하여야 합니다. n = 3 m = 4 array = [[0]*m for _ in range(n)] print(array) #[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] array[1][1] = 5 print(array) #[[0, 0, 0, 0], [0, 5, 0, 0], [0, 0, 0, 0]] 만약 컴프리헨션을 사용하지 않고 선언한다면 오류가 생길 수 있습니다. n = 3 m = 4 array = [[0]*m] * n print(array) array[1][1] = 5 print(arra..

    [Python] 리스트 특정값 모두 제거하기

    파이썬에서 리스트 값 중 특정 값들을 제거하기 위한 코드를 설명하는 글입니다. 파이썬은 다른 언어들과는 다르게 리스트(배열)에서 특정 값들을 모두 제거하는 함수가 없습니다. 다른 방법도 있겠지만 저는 다음과 같이 코드를 구현했습니다. a = [1,2,3,3,3,3,5,5,5] remove_set = {3,5} result = [i for i in a if i not in remove_set] print(result)#[1, 2] a 리스트에 3, 5가 중복되어 있는 데 remove_set과 컴프리헨션을 사용하여 쉽게 제거할 수 있습니다.