전체 글

IT 기술과 관련된 유용한 조언과 흥미로운 대화를 제공하는 블로그
Factory Method - 시작 객체 생성을 공장(Factory) 클래스로 캡슐화 처리해서 대신 생성하게 하는 생성 디자인 패턴이다. 좀 더 자세하게 설명하자면, 클라이언트에서 직접 new 연산자를 통해 제품 객체를 생성하는 것이 아니라 대신 제품 객체를 생성할 공장 클래스를 만들고, 이를 상속하는 서브 공장 클래스의 메서드에서 여러 가지 제품 객체 생성을 각각 책임지는 것을 말한다. 이 패턴을 이용하는 이유는 객체간의 결합도를 낮출 수 있고, 유지보수에 용이해지기 때문이다. 💡 공장한테 요청하면 서브 공장 클래스의 메서드에서 제품을 생성한다는 말을 표현한 건 알겠는데, 그냥 한 공장에서 다 만들면 안돼? 왜 서브 공장이 필요한데?라는 물음이 생길 수 있다. 이를 이해하기 위해서는 먼저 Factory..
· JAVA
들어가며 자바에서 동적으로 배열의 크기를 변경하기 위해 배열 대신 List를 사용하곤 한다. 그런데 클래스 선언 문법에 로 되어있는 코드를 보았을 것이다. 이걸 제네릭(Generic) 이라고 부르며, 제네릭 파라미터는 꺽쇠안에 포함하여 전달한다. 제네릭이 하는게 무엇이고, 왜 사용할까? 한번 알아보자. 제네릭 (Generics) 이란? ArrayList list = new ArrayList(); 제네릭(Generics)는 다양한 타입의 객체를 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크(compile-time type check)를 해주는 기능이다. 객체의 타입을 컴파일 시에 체크하면, 객체의 타입 안정성을 높이고, 형변환의 번거로움을 줄여준다. 쉽게 말하면, 제네릭스를 사용하면 다루고자 하는..
· JAVA
들어가며JAVA에서 this와 this()는 비슷하게 생겼지만 엄연히 다르다. 어떠한 차이가 있는지 예제 코드를 통해 이해해보자. this생성자의 매개변수의 ≠ 이름 인스턴스 변수의 이름class Car { String color; String gearType; int door; Car(String a, String b, int c){ color = a; gearType = b; door = c; } public static void main(String[] args) { Car c = new Car("black", "auto", 3); System.out.println(c.color); System.out.println(c.gearType); System.out.println(c.door); } } t..
· DevOps
개요 배포 스크립트에 현재 실행중인 프로세스의 PID를 kill -15로 종료시키는 명령을 추가했었다. 하지만 PID를 찾지 못하여 프로세스를 종료시키지 않아 포트충돌이 발생하였다. 왜 이러한 원인이 발생했는지 알아보자. (참고로 리눅스는 Ubuntu를 사용하였다.) 쉘 스크립트 란? 쉘 스크립트(Shell Script)는 리눅스에서 사용되는 스크립트 언어로, "특정한 명령어들을 순차적으로 실행하도록 한 스크립트 파일"이다. 쉘 스크립트 파일은 일반적으로 텍스트 파일로 작성되고 .sh 확장자를 가지고 있다. 또한 #!과 같은 shebang(셔뱅)으로 시작하여 현재 스크립트를 실행하기 위한 쉘 프로그램을 지정할 수 있는데, 우리가 사용할 Bash 스크립트는 첫번째 라인에 #!/bin/bash를 적어 지정할..
· JAVA
개요StringBuilder sb = new StringBuilder(str);List alphabetIndex = new ArrayList();List alphabet = new ArrayList();String regex = "^[a-zA-Z]$"; // 알파벳 a~z, A~Z로 시작하는 문자 1개for (int i = 0; i   입력한 문자열을 문자 단위로 순회하면서 정규식과 일치하는지 확인하고 일치하는 부분은 각각의 리스트에 추가하는 과정을 구현한 코드이다.  처음에는 if문에서. equals(regex)를 이용해서 문자열의 참/거짓을 비교하였다. a%b를 입력했을 때 순서대로 true(a), false(%), true(b)를 예상했지만, 정규식과 일치함에도 조건식의 반환값이 모두 false가 ..
· Retrospect
10월 ~ 12월 교내 데이트 매칭 웹 서비스를 런칭하다 Leets 2기에서는 ItoR 팀으로 활동을 하게 되었다. 원래라면 1기와 동일하게 Zero100 팀에 편성되어 있었지만 더 성장하고 싶었고, 더 개발다운 개발을 해보고 싶었다. 고민하다가 팀 빌딩 마감 하루 전에 성민이형에게 ItoR 팀에서 해보고 싶다고 어필했고, 흔쾌히도 형이 허락을 해줘서 합류를 하게 되었다. 다시 한 번 형에게 고맙다고 말하고 싶다. 지난번 Zero100 팀에서도 그러했듯이 팀 내에서 가장 실력이 낮았기에 ItoR 팀에서 운영했던 "TDD 스터디", "자바의 정석 스터디"를 열심히 하려고 했었다. 하지만 우테코랑 비교과 활동 때문에 목표만큼 하지 못했다. 이때 스터디를 등한시 했던 게 후회가 된다. 팀원들에게 지식을 나눠주..
· Retrospect
10월 ~ 12월 우아한 테크코스를 도전하다 Leets 2기를 시작하고 나서, 다들 만날 때 마다 하나같이 "우테코"에 대해서 얘기하는 것을 옆에서 들었다. 방학 때 이것저것 알아봤기 때문에 "우아한테크코스"라는 부트캠프에 대해서 얘기하고 있다는 것은 알았지만, 정작 2학년 때 지원을 해야겠다는 생각은 하지 못했다. 왜냐하면 보통 대학교 4학년 학생들 그리고 취준생 분들이 많이 지원하고, 다들 실력자들이 지원한다고 말하기에 실력을 키워서 3학년 or 4학년 때 지원을 해야겠다고 생각했기 때문이다. 일단은 성민이형(회장님)이 최종 코딩테스트에서 떨어졌기에 지원할 엄두 조차 못하긴 했었다. 2학년 동기 중에도 우테코에 지원하려고 하는 사람은 정완이형 밖에 없었고, 잘하는 친구들도 다들 3,4학년 때 지원을 ..
· Retrospect
2023년도에는 시간이 참 빨리 갔다. 해야하는 일도 많았고 벌여 놓은 일도 많았기에 나름 하루하루 열심히 살았다고 생각하는데, 열심히 했음에도 아쉬운 점은 있기 마련인 것 같다. 블로그 첫 글이 올해 회고록 이라니... 귀찮아서 기록을 하지않았던 내 자신이 창피하고 후회스럽다. 하지만 이미 지나간 일 2024년도에 더 나은 내가 되기위해서 열심히 블로그를 가꾸어 나가야 겠다! 이 글을 2024년도 12월 31일에 봤을 때, "많이 성장했구나" 하고 말을 할 수 있었으면 좋겠다 아니 하도록 만들것이다. 이제 본격적으로 어떤 일을 했고, 어떤 결과를 얻었는지 지난 기억들을 되짚어보고 회고를 해보자 높은 언덕 하나를 넘고 나서야 깨닫는 것은 넘어야 할 언덕이 많이 남아있다는 사실이다. - 넬슨 만델라 3월 ..
· Retrospect
2023년도에는 시간이 참 빨리 갔다. 해야하는 일도 많았고 벌여 놓은 일도 많았기에 나름 하루하루 열심히 살았다고 생각하는데, 열심히 했음에도 아쉬운 점은 있기 마련인 것 같다. 블로그 첫 글이 올해 회고록 이라니... 귀찮아서 기록을 하지않았던 내 자신이 창피하고 후회스럽다. 하지만 이미 지나간 일 2024년도에 더 나은 내가 되기위해서 열심히 블로그를 가꾸어 나가야 겠다! 이 글을 2024년도 12월 31일에 봤을 때, "많이 성장했구나" 하고 말을 할 수 있었으면 좋겠다 아니 하도록 만들것이다. 이제 본격적으로 어떤 일을 했고, 어떤 결과를 얻었는지 지난 기억들을 되짚어보고 회고를 해보자 높은 언덕 하나를 넘고 나서야 깨닫는 것은 넘어야 할 언덕이 많이 남아있다는 사실이다. - 넬슨 만델라 3월 ..
팁택톡
Tip Tech Talk