개발 블로그
-
에러
LNK2005 이미 정의되어 있습니다. / 외부라이브러리 충돌 해결
LNK2005 이미 정의되어 있습니다. 오픈 소스 라이브러리 중 OpenXLSX과 DuckX를 사용하다가 충돌이 남.같은 함수명을 사용하고 있어, 한 라이브러리의 함수명을 바꿔서 컴파일 후 적용해주면 됩니다. 해결
-
삽질 기록
[C++] Jira REST API : You do not have permission to create issues in this project. (401)
You do not have permission to create issues in this project. (401)POST 시 "이 프로젝트에서 이슈를 생성할 권한이 없습니다.", 권한 오류 발생.Admin 계정으로 이슈 생성이 잘되고 코드도 문제가 없어보임. Atlassian Community에 올라온 게시글과 댓글을 읽다가 토큰을 확인해보라는 댓글 발견. 당황스럽다..분명 생성했는데 말이지..(삽질도 이런 삽질이 없음) API Token 생성 방법계정 관리 > 보안 > API 토큰 > API 토큰 만들기
-
discord BOT
[디스코드 봇 개발] - #3 메시지 읽기, 답장
목차 메시지 읽고 답장 이벤트 리스너 추가 JDA jda = JDABuilder.createDefault .addEventListeners(new CommandHandler()) .build(); 앞서 #2에서 JDA 객체를 생성할 때 작성한 코드에 addEventListeners메서드를 추가합니다. 이벤트 리스너 메서드는 리스너에서 정의한 이벤트가 발생할 때마다 구현해놓은 동작을 실행합니다. CommandHandler 명령어를 처리하고 실행할 클래스를 생성합니다. package santa; import net.dv8tion.jda.api.entities.Message; import net.dv8tion.jda.api.entities.User; import net.dv8tion.jda.api.entiti..
-
Clean Code
[Clean Code/클린 코드] 9장 단위 테스트
9장 단위 테스트 📖 깨끗한 테스트 코드를 만들려면? 세 가지가 필요하다. 가독성, 가독성, 가독성. 목차 🗒️ 책에서 기억하고 싶은 내용 TDD 법칙 세 가지 1. 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 2. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 3. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 테스트 당 assert 하나 public void testGetPageHierarchyAsXml() throws Exception { givenPages("PageOne", "PageOne.ChildOne", "PageTwo"); whenRequestIsIssued("root", "type:pages"); thenRespons..
-
백준
백준 : 1094번 막대기 (JAVA)
목차 JAVA 풀이 1094번 막대기 https://www.acmicpc.net/problem/1094 문제 지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대를 만들려고 한다. 막대를 자르는 가장 쉬운 방법은 절반으로 자르는 것이다. 지민이는 아래와 같은 과정을 거쳐서 막대를 자르려고 한다. 지민이가 가지고 있는 막대의 길이를 모두 더한다. 처음에는 64cm 막대 하나만 가지고 있다. 이때, 합이 X보다 크다면, 아래와 같은 과정을 반복한다. 1. 가지고 있는 막대 중 길이가 가장 짧은 것을 절반으로 자른다. 2. 만약, 위에서 자른 막대의 절반 중 하나..
-
git
Git 패키지명 변경하는 방법
목차 깃허브 패키지명 변경하는 방법 Git Bash를 사용하였습니다. 패키지명에 오타가 있어서 변경해보도록 하겠습니다. 로컬 저장소 클론 git clone '리포지토리 주소' 작은 따옴표는 빼고 입력해주세요. (아래 모든 명령어 또한) 패키지로 이동 cd '리포지토리 이름' 이름 변경 mv '현재 이름' '변경할 이름' 추가 사항 파일의 커밋 메시지에 파일 정보를 적어뒀는데 패키지명을 변경할 때 이게 전부 사라지더라고요. (모르고 날렸다가 커밋 전으로 돌렸네요.) 파일을 건들지 않고 패키지명을 변경할 방법이 없는 것 같습니다..
-
에러
[Error] No matching tests found in any candidate test task.
목차 No matching tests found in any candidate test task. 첫번째 방법. build.gradle에 내용 추가 test { useJUnitPlatform() } Junit5부터는 다음 내용을 추가하여야 테스트가 인식됩니다. 두번째 방법. 빌드 도구 설정 수정 Settings - Build, Execution, Deployment - Build Tools - Gradle 위 이미지에서 표시된 부분을 IntelliJ로 수정합니다. 참고 자료 Intelij 2019.1 update breaks JUnit tests After 2019.1 update broke all tests with error: no tests found for given includes xxxx.so..
-
discord BOT
[디스코드 봇 개발] - #2 봇 초대, 온라인, JDA
목차 봇 초대하기 Discord Developer Portal — API Docs for Bots and Developers Integrate your service with Discord — whether it's a bot or a game or whatever your wildest imagination can come up with. discord.com Discord Developer Portal - OAuth2에서 SCOPES을 bot에 체크하면 BOT PERMISSIONS칸이 뜨는데 원하는 권한을 체크해주면 맨 아래에 URL이 생성됩니다. 생성된 URL을 통해 서버에 봇을 초대합니다. 서버에 초대 완료하였습니다. 이제 오프라인 되어 있는 봇을 온라인으로 돌려보겠습니다. 봇 온라인 프로젝트 생..
-
Clean Code
[Clean Code/클린 코드] 8장 경계
8장 경계 📖 통제가 불가능한 외부 패키지에 의존하는 대신 통제가 가능한 우리 코드에 의존하는 편이 훨씬 좋다. 목차 🗒️ 책에서 기억하고 싶은 내용 외부 코드 사용하기 Map sensors = new HashMap(); 프로그램에서 Map 인스턴스를 여기저기로 넘긴다면, Map 인터페이스가 변할 경우, 수정할 코드가 상당히 많아진다. public class Sensors { private Map sensors = new HashMap(); public Sensor getById(String id) { return (Sensor) sensors.get(id); } //이하 생략 } Map을 좀 더 깔끔하게 사용한 코드다. ● Sensors 사용자는 제네릭스가 사용되었는지 여부에 신경 쓸 필요가 없다. ○..
-
기술 스터디
스택(Stack) & 큐(Queue)
목차 자료구조 왼쪽처럼 어질러져 있는 물건보다 오른쪽처럼 종류별로 정돈되어 있는 물건이 더 찾기가 수월합니다. 이처럼 컴퓨터와 프로그램도 이러한 자료의 추상화가 필요한데요. 자료구조는 효율적인 접근 및 수정을 가능케 하는 데이터 값의 모임을 말합니다. 스택(Stack) 후입선출 스택 구조는 아래가 막힌 상자에 데이터를 넣는 것과 같습니다. 데이터를 삽입할 때는 하나씩 차곡차곡 넣고, 삭제할 때는 마지막에 넣은 데이터가 먼저 삭제됩니다. 후입선출(LIFO : Last in First Out) 데이터 삽입 데이터 삭제 TOP 데이터의 삽입과 삭제가 일어나는 부분을 top이라는 변수를 사용해서 가리킵니다. 데이터 삽입 데이터의 삽입 연산이 발생할 때는 삽입될 데이터가 top이 가리키는 곳의 바로 위쪽에 저장이..
-
discord BOT
[디스코드 봇 개발] - #1 봇 생성
목차 #1 봇생성 1. 사이트 접속 디스코드 개발자 포털에 들어갑니다. https://discord.com/developers/applications Discord Developer Portal — API Docs for Bots and Developers Integrate your service with Discord — whether it's a bot or a game or whatever your wildest imagination can come up with. discord.com 2. New Application Applications -> New Application 생성할 봇 이름을 입력하고 약관 동의 후 생성 버튼을 누릅니다. 곧 크리스마스기 때문에 산타봇이라고 이름을 지어줬습니다. 🎄..
-
기술 스터디
REDIS란?
목차 REDIS란? REmote DIctionary Server의 약어입니다. 한줄로 설명하면 외부 Key-Value 형태의 서버를 말합니다. 인 메모리 데이터 구조 말 그대로 메모리(RAM)에 데이터를 저장합니다. 외부 저장 장치(SSD, HDD)에 데이터를 저장하지 않고 메모리에서 데이터를 읽고 쓰기 때문에 속도가 빠릅니다. 하지만 RAM은 용량이 작다는 단점이 있습니다. 제 컴퓨터에는 8GB의 RAM이 2개, 총 16GB가 꽂혀 있습니다. 이러한 용량으로는 메인 데이터베이스로 사용하기에 무리가 있습니다. REDIS의 장단점 REDIS는 속도가 빠르다는 장점이 있지만 용량이라는 단점이 있었습니다. 이러한 장단점으로 메인 DB로 사용하지 않고 보조적인 수단으로 사용되고 있기 때문에 캐시 데이터베이스 서..
-
Clean Code
[Clean Code/클린 코드] 7장 오류 처리
7장 오류 처리 📖 null을 전달하지 마라 목차 🗒️ 책에서 기억하고 싶은 내용 Try-Catch-Finally문부터 작성하라 먼저 강제로 예외를 일으키는 테스트 케이스를 작성한 후 테스트를 통과하게 코드를 작성하는 방법을 권장한다. 그러면 자연스럽게 try 블록의 트랜잭션 범위부터 구현하게 되므로 범위 내에서 트랜잭션 본질을 유지하기 쉬워진다. 미확인(unchecked) 예외를 사용하라 대규모 시스템에서 호출이 일어나는 방식을 상상해보라. 최상위 함수가 아래 함수를 호출한다. 아래 함수는 그 아래 함수를 호출한다. 단계를 내려갈수록 호출하는 함수 수는 늘어난다. 이제 최하위 함수를 변경해 새로운 오류를 던진다고 가정하자. 확인된 오류를 던진다면 함수는 선언부에 throws절을 추가해야 한다. 그러면 ..
-
Clean Code
[Clean Code/클린 코드] 6장 객체와 자료 구조
6장 객체와 자료 구조 📖 개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 심각하게 고민해야 한다. 아무 생각 없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다. 목차 🗒️ 책에서 기억하고 싶은 내용 자료/객체 비대칭 ● 절차적인 도형 class Square { public Point topLeft; public double side; } public class Rectangle { public Point topLeft; public double height; public double width; } public class Circle { public Point center; public double radius; } public class Geometry { public final doubl..
-
Clean Code
[Clean Code/클린 코드] 5장 형식 맞추기
5장 형식 맞추기 📖 좋은 소프트웨어 시스템은 읽기 쉬운 문서로 이뤄진다는 사실을 기억하기 바란다. 목차 🗒️ 책에서 기억하고 싶은 내용 신문 기사처럼 작성하라 최상단에 기사를 몇 마디로 요약하는 표제가 나온다. 독자는 표제를 보고서 기사를 읽을지 말지 결정한다. 첫 문단은 전체 기사 내용을 요약한다. 세세한 사실은 숨기고 커다란 그림을 보여준다. 쭉 읽으며 내려가며 세세한 사실이 조금씩 드러난다. 날짜, 이름, 발언, 주장, 기타 세부사항이 나온다. 수직거리 서로 밀접한 개념은 세로로 가까이 둬야 한다. ● 변수 선언 ● 인스턴스 변수 ○ C++ : 클래스 마지막에 인스턴스 변수 선언 ○ Java : 클래스 맨 처음에 인스턴스 변수 선언 가로 공백과 밀집도 public class Quadratic { ..
-
Clean Code
[Clean Code/클린 코드] 4장 주석
4장 주석 📖 나쁜 코드에 주석을 달지 마라. 새로 짜라. 목차 🗒️ 책에서 기억하고 싶은 내용 주석은 나쁜 코드를 보완하지 못한다 코드에 주석을 추가하는 일반적인 이유는 코드 품질이 나쁘기 때문이다. 코드로 의도를 표현하라! // 직원에게 복지 혜택을 받을 자격이 있는지 검사한다. if ((employee.flags & HOURLY_FLAG) && (employee.age > 65)) if (employee.isEligibleForFulBenefits()) 몇 초만 더 생각하면 코드로 대다수 의도를 표현할 수 있다. 예제 p.90~94 목록 4-7을 리팩터링한 결과인 4-8을 비교해서 볼 것 🗒️ 소감 챕터 1~3을 읽으며 코드를 작성하는 습관을 고치려고 노력했다. 한눈에 알아볼 수 있도록 변수와 함수..
-
Clean Code
[Clean Code/클린 코드] 3장 함수
3장 함수 📖 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다. 목차 🗒️ 책에서 기억하고 싶은 내용 Switch문 public Money calculatePay(Employee e) throws InvalidEmployeeType { switch (e.type) { case COMMISSIONED: return calculateCommissionedPay(e); case HOURLY: reutrn calculateHourlyPay(e); case SALARIED: return calculateSalariedPay(e); default: throw new InvalidEmployeeType(e.type); } } 위 함수에는 몇 가지 문제가 있다. • 함수가 길다...
-
Clean Code
[Clean Code/클린 코드] 2장 의미있는 이름
2장 의미있는 이름 📖 좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 훨씬 더 많다. 목차 🗒️ 책에서 기억하고 싶은 내용 의도를 분명히 밝혀라 // before public List getThem() { List list1 = new ArrayList(); for (int[] x : theList) if (x[0] == 4) list1.add(x); return list1; } // after public List getFlaggedCells() { List flaggedCells = new ArrayList(); for (Cell cell : gameBoard) if (cell.isFlagged()) flaggedCells.add(cell); return flaggedCells;..
-
Clean Code
[Clean Code/클린 코드] 1장 깨끗한 코드
1장 깨끗한 코드 📖 나쁜 코드는 나쁜 코드를 '유혹'한다! 목차 🗒️ 책에서 기억하고 싶은 내용 객체 지향 설계의 다섯 가지 원칙 (SOLID) SRP(단일 책임 원칙) : 클래스에는 한 가지, 단 한 가지 변경 이유만 존재해야 한다. OCP(개방 폐쇄 원칙) : 클래스는 확장에 열려 있어야 하며 변경에 닫혀 있어야 한다. LSP(리스코프 치환 원칙) : 상속받은 클래스는 기초클래스를 대체할 수 있어야 한다. ISP(인터페이스 분리 원칙) : 클라이언트에 밀접하게 작게 쪼개진 인터페이스를 유지한다. DIP(의존관계 역전 원칙) : 추상화에 의존해야 하며, 구체화에 의존하면 안 된다. 바야네 스트롭스트룹 (C++ 창시자 / The C++ Programming language 저자) 나는 우아하고 효율적인..
-
Clean Code
[Clean Code/클린 코드]
Clean Code 로버트 C. 마틴 저/박재호, 이해영 역 인사이트(insight) 2013년 12월 24일 독서 기간 2023년 11월 9일 ~ ing GitHub Link
-
discord BOT
[디스코드 봇 개발] - #0 개발 동기 및 개발 환경
목차 #0 디스코드 봇 만들기 개발 동기 디스코드 하루봇에 주식 기능이 있더라고요. 친구들과 열심히 이 기능을 가지고 놀다가 문득 디스코드봇을 만들고 싶어졌습니다. 친구들과 1년 이상 꾸준히 사용해온 서버의 장으로서 다양한 디스코드봇을 사용한 경험이 있습니다. 그 중 노래봇을 가장 유용하게 사용하고 있는데, 그 봇이 종종 오류로 인해 재생이 되지 않아 불편했던 경험을 되새겨 보며 노래봇을 하나 만들어 보기로 결정했습니다! JDA JDA란 Java Discord API의 줄임말입니다. (이미지에 링크 걸어뒀습니다.) JDA를 사용하여 개발을 해보겠습니다. 개발 환경 IDE : IntelliJ Build Tool : Gradle JDK : 17 사용하여 개발할 예정입니다.
-
에러
GitHub Fork 리포지토리 업데이트 오류 - Untracked working tree file ~ by merge. 추적되지 않은 파일 덮어쓰기 에러 - src refspec main does not match any
목차 GitHub Fork 리포지토리 업데이트 방법 GitHub Fork 리포지토리 업데이트 방법 https://heiioworid.tistory.com/22 업데이트 방법은 이 포스팅을 확인하시면 됩니다. 에러 1 : Untracked working tree file -. 깃허브 포크한 리포지토리를 원본 리포지토리의 내용으로 업데이트 하려고 하는데 이런 문구가 떠서 해결하는 방법을 가져왔습니다. fetch 명령어로 최신 내용을 불러오는 것까지 완료하고 merge 명령어를 입력하니 저런 에러 문구가 떴는데요. 만약 원본 저장소에 있는 파일로 덮어쓰기를 원한다면, 아래의 명령어를 사용할 수 있습니다. 이 명령은 원격 저장소에서 최신 변경사항을 가져와서 현재 브랜치에 적용합니다. 주의사항 주의: 이 작업은 ..
-
백준
백준 : 5635번 생일 (JAVA)
목차 JAVA 풀이 5635번 생일 문제 어떤 반에 있는 학생들의 생일이 주어졌을 때, 가장 나이가 적은 사람과 가장 많은 사람을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 반에 있는 학생의 수 n이 주어진다. (1 ≤ n ≤ 100) 다음 n개 줄에는 각 학생의 이름과 생일이 "이름 dd mm yyyy"와 같은 형식으로 주어진다. 이름은 그 학생의 이름이며, 최대 15글자로 이루어져 있다. dd mm yyyy는 생일 일, 월, 연도이다. (1990 ≤ yyyy ≤ 2010, 1 ≤ mm ≤ 12, 1 ≤ dd ≤ 31) 주어지는 생일은 올바른 날짜이며, 연, 월 일은 0으로 시작하지 않는다. 이름이 같거나, 생일이 같은 사람은 없다. 출력 첫째 줄에 가장 나이가 적은 사람의 이름, 둘째 줄에 가장 ..
-
git
GitHub Fork 리포지토리 업데이트 방법
목차 GitHub Fork 리포지토리 업데이트 방법 Fork한 Repository가 자동으로 업데이트 되지 않더라고요. 그래서 업데이트하는 방법을 가져왔습니다. 1. 포크해 온 저장소 추가 git remote add origin (포크한 리포지토리 주소) 주소를 복사해서 바로 붙여넣으면 다른 기호도 같이 들어가기 때문에 메모장이나 다른 곳에 한 번 붙여넣은 뒤에 다시 복붙해서 넣어주세요. 2. 원본 저장소 추가 git remote add upstream (원본 리포지토리 주소) 이것 또한 링크를 다른 곳에 한 번 붙여넣은 뒤에 다시 복붙해서 넣어주세요. 3. 확인 git remote -v 잘 추가되었는지 확인해줍니다. 4. 최신 내용 불러오기 git fetch upstream 5. merge git me..
-
백준
백준 : 10845번 큐 (JAVA)
목차 JAVA 풀이 10845번 큐 문제 정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오. 명령은 총 여섯 가지이다. - push X: 정수 X를 큐에 넣는 연산이다. - pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다. - size: 큐에 들어있는 정수의 개수를 출력한다. - empty: 큐가 비어있으면 1, 아니면 0을 출력한다. - front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다. - back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다. 입력 첫째 줄에 주어지는 명령의..
-
백준
백준 : 2755번 이번 학기 평점은 몇 점? (JAVA)
목차 JAVA 풀이 2755번 이번 학기 평점은 몇 점? 문제 최백준이 이번 학기에 들은 과목과 학점 그리고 성적이 주어졌을 때, 평균 평점을 계산하는 프로그램을 작성하시오. 성적은 A+~F까지 총 13개가 있다. A+: 4.3, A0: 4.0, A-: 3.7 B+: 3.3, B0: 3.0, B-: 2.7 C+: 2.3, C0: 2.0, C-: 1.7 D+: 1.3, D0: 1.0, D-: 0.7 F: 0.0 평균 평점은 각 과목의 학점*성적을 모두 더한 뒤에, 총 학점으로 나누면 된다. 입력 첫째 줄에, 백준이가 이번 학기에 들은 과목 수가 주어진다. 둘째 줄부터 N개의 줄에 각 과목의 과목명, 학점, 성적이 주어진다. 과목명은 알파벳 소문자와 숫자, 그리고 밑줄 (_)로만 이루어져 있으며, 최대 10..
-
백준
백준 : 13223번 소금 폭탄 (JAVA)
목차 JAVA 풀이 13223번 소금 폭탄 문제 철수는 화학 시험을 망치고, 애꿎은 화학 선생님에게 복수를하기로 한다. 철수는 집에서 만든 자동 로봇팔을 선생님의 책상에 숨겨, 선생님이 수업을 시작하려 들어온 순간 숨겨놓은 로봇팔을 이용해 선생님을 혼내주려고한다. 철수는 선생님이 늘 애용하는 물컵에 시간이 되면 로봇팔이 소금을 잔뜩 집어넣도록 프로그램을 짜려고한다. 철수는 현재시각과 선생님이 언제 컵을 사용할지 시간을 알고있지만, 수 계산에 정말 약해서 로봇팔에 입력해야할 시간 계산을 못한다. 철수가 로봇팔에 알맞은 시간을 입력할수 있도록 도와주자. 입력 첫째 줄에는 현재 시각이 hh:mm:ss로 주어진다. 시간의 경우 0≤h≤23 이며, 분과 초는 각각 0≤m≤59, 0≤s≤59 이다. 두 번째 줄에는..
-
기술 스터디
OSI 7계층
목차 OSI 7계층이란? OSI 7계층이란, 모든 네트워크 통신에서 발생하는 여러가지 충돌 문제를 완화하기 위해 복잡한 네트워크 구조를 7개의 계층으로 분류하여 각 계층 별로 수행되는 역할과 책임에 대해 상세히 구분하여 분류한 것을 말합니다. 7계층은 첫번째 물리층, 두번째 데이터 링크층, 네트워크층, 전송, 세션, 표현, 응용층으로 분류되어 있습니다. 물리, 데이터 링크, 네트워크층을 네트워크지원계층으로, 세션 표현 응용층은 사용자 지원계층으로 나눌 수 있습니다. 이렇게 통신기능을 7개의 수직계층으로 분할하여 각 계층마다 다른 계층과는 독립적인 기능을 지원하도록 구성하였습니다. 독립적으로 구성한 이유 이렇게 독립적으로 구성한 이유는 한 모듈에 대한 변경이 전체 모듈에 미치는 영향을 최소화하기 위해서입니..
-
추천
개발 도서 추천
목차 면접을 위한 CS 전공지식 노트 혼자 공부하는 컴퓨터 구조 + 운영체제 Real MySQL 8.0 1권
-
기술 스터디
DTO & VO
목차 DTO DTO는 데이터 전송 객체의 약자로, 계층 간 데이터 교환을 위해 사용하는 객체를 말합니다. 그림으로 표현하면 이렇습니다. 각 계층 간 데이터 교환이 필요할 때 DTO를 사용합니다. getter/setter 메서드 순수하게 데이터를 담아 전달하고 받아서 꺼내는게 목적이기 때문에 Getter / Setter 외의 비즈니스 로직은 가지고 있지 않습니다. 메서드로는 Getter / Setter만을 갖는데, Get 메서드는 담겨진 값을 꺼낼 때 사용하고, Set 메서드는 값을 담아서 전달할 때 사용합니다. set 메서드 set 메서드는 값을 담을 때 사용하기 때문에 데이터를 전달하는 과정에서 값의 변조 가능성이 있습니다. 그렇기 때문에 왼쪽처럼 생성자로 값을 넣어주면 데이터 전달 과정에서 변조가 불..
-
기술 스터디
ENUM
목차 Enum이란? enum은 열거형으로, 관련된 상수들을 같이 묶어 놓은 것을 말합니다. Enum을 사용하는 이유 '요일'은 월화수목금토일 7가지, '계절'은 봄여름가을겨울 4가지로 한정되어 있습니다. 이렇게 한정된 데이터들은 열거형으로 묶어주면 편합니다. 일일히 상수를 하나하나 정의하는 것보다 열거형을 사용하면 간단하게 정의 가능합니다. 값은 자동으로 0부터 순서대로 부여됩니다. Enum의 정의와 사용법 열거형을 정의하는 방법은, 키워드 enum을 적고 열거형이름과 괄호 안에 콤마 구분자로 상수명들을 적어주면 됩니다. 예를 들어 디렉션이라는 열거형을 정의해보았습니다. 이 열거형을 사용할 때는, 열거형 타입의 변수를 선언을 합니다. 이때, 이 변수에는 열거형 안에 있는 네 개의 값 중 하나만 들어올 수..
-
aws
AWS Builders Korea Program [기초 과정] : Container와 EKS 시작하기
다시보기 https://kr-resources.awscloud.com/aws-builders-korea-program 실습 https://catalog.us-east-1.prod.workshops.aws/workshops/46236689-b414-4db8-b5fc-8d2954f2d94a/ko-KR/install
-
aws
AWS 서버리스로 서버 없이 간단한 웹 애플리케이션 만들기
Lambda API Gateway DynamoDB api 연결된 webpage DB에도 잘들어가네요 다시보기 https://aws.amazon.com/ko/events/seminars/aws-builders/ 실습 https://catalog.us-east-1.prod.workshops.aws/workshops/600420b7-5c4c-498f-9b80-bc7798963ba3/ko-KR/serverless
-
백준
백준 : 14단계 집합과 맵 : 1269 대칭 집합 (JAVA)
목차 JAVA 풀이 1269번 대칭 집합 문제 자연수를 원소로 갖는 공집합이 아닌 두 집합 A와 B가 있다. 이때, 두 집합의 대칭 차집합의 원소의 개수를 출력하는 프로그램을 작성하시오. 두 집합 A와 B가 있을 때, (A-B)와 (B-A)의 합집합을 A와 B의 대칭 차집합이라고 한다. 예를 들어, A = { 1, 2, 4 } 이고, B = { 2, 3, 4, 5, 6 } 라고 할 때, A-B = { 1 } 이고, B-A = { 3, 5, 6 } 이므로, 대칭 차집합의 원소의 개수는 1 + 3 = 4개이다. 입력 첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 ..
-
백준
백준 : 14단계 집합과 맵 : 14425 문자열 집합 (JAVA)
목차 JAVA 풀이 14425번 문자열 집합 문제 총 N개의 문자열로 이루어진 집합 S가 주어진다. 입력으로 주어지는 M개의 문자열 중에서 집합 S에 포함되어 있는 것이 총 몇 개인지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어진다. 입력으로 주어지는 문자열은 알파벳 소문자로만 이루어져 있으며, 길이는 500을 넘지 않는다. 집합 S에 같은 문자열이 여러 번 주어지는 경우는 없다. 출력 첫째 줄에 M개의 문자열 중에 총 몇 개가 집합 S에 포함되어 있는지 출력한다. 예제 입력 1 5 11 bae..
-
기술 스터디
Cookie & Session
목차 쿠키와 세션 (이번 피피티 참 잘만들었답니다) 쿠키와 세션에 대한 설명을 해드리기 전, 간단하게 서버와 클라이언트에 대한 설명을 드리겠습니다. 서버 서버란 네트워크를 통해 서비스를 제공하는 컴퓨터 시스템을 말합니다. A 컴퓨터에 정보를 올리면 다른 컴퓨터들이 접속해서 그 정보를 확인할 수 있습니다. 이때 A 컴퓨터가 서버 컴퓨터가 됩니다. 즉, 정보를 제공하는 역할을 하는 제공자가 된다면 서버 컴퓨터로 불릴 수 있습니다. 클라이언트 쿠키 쿠키란? 자, 이제 쿠키란 무엇일까요? 쿠키 차단, 쿠키 삭제라는 말을 많이 들어보셨을 겁니다. 쿠키는 저희의 로컬 컴퓨터, 즉 클라이언트에 저장되는 기록 정보 파일을 말합니다. 쿠키의 구성 쿠키는 이름, 값, 만료일, 경로 정보로 구성되어 있습니다. 쿠키의 크기 ..
-
기술 스터디
HTTP & HTTPS
목차 HTTP HTTP란 HTTP란 Hypertext Transfer Protocol의 줄임말로, 직역을 해보자면 Hypertext Hypertext는 텍스트를 뛰어넘다 라는 뜻을 가지고 있습니다. Hypertext보다 Hyperlink를 더 자주 들어보았을건데요. Hyperlink를 통해 사용자가 한 문서에서 다른 문서로 이동할 수 있는 텍스트를 Hypertext라고 합니다. Transfer Transfer은 전송하다라는 뜻을 가지고 있습니다. Protocol 컴퓨터나 통신 장비 사이에서 데이터 통신을 원활하게 하기 위해 필요한 통신 규약을 Protocol이라고 합니다. 즉 HTTP란 인터넷에서 하이퍼텍스트 문서를 교환하기 위해 사용되는 통신 규약을 말합니다. HTTP는 가장 널리 사용되는 프로토콜 중..
-
기술 스터디
Garbage Collection
목차 Garbage Collection 가비지 컬렉터에 대해 설명을 드리기 전에, 스택메모리와 힙 메모리에 대한 설명을 잠깐 드리겠습니다. 스택 메모리 (stack memory) 와 힙 메모리(heap memory) 스택메모리는 int와 같은 기본형 데이터의 값이 저장되는 영역입니다. 그리고 참조형 변수 st의 주소값이 저장됩니다. 위 참조형 변수 st의 값 데이터는 힙 메모리에 저장됩니다. 이렇게 스택 영역에 stack이라는 이름으로 생성된 변수는 힙 영역의 힙이라는 스트링을 레퍼런스하게 됩니다. 그리고 String 클래스는 문자열을 결합할 때 이미 있는 heap 문자에 memory 문자가 추가되는 것이 아니라 새로 힙 메모리라는 문자열을 만들어 힙 메모리에 값이 저장이 됩니다. Garbage stac..
-
기술 스터디
MVC (Model View Controller)
목차 MVC란? MVC란 Model, View, Controller의 약자를 말합니다. 이것은 모델 2의 개발 방식과 거의 유사합니다. 모델 2는 화면 출력 부분을 View, 데이터 베이스와 연동하는 부분 등의 로직 부분을 Model, Controller는 이 두 부분을 적절하게 연결해주는 역할을 합니다. Model 1 그런데 Model 1은 Controller가 존재하지 않습니다. 한 페이지에 Model과 View가 모두 존재하여 Controller가 존재할 필요가 없기 때문입니다. Model 2 앞서 설명 드린 대로, Model 2는 Model과 View를 독립적으로 코딩하기 때문에 Controller를 만들어서 둘을 연동해주어야 합니다. FrontEnd 담당은 Model 부분을 신경 쓰지 않고 Vi..
-
프로그래머스
프로그래머스 코딩 기초 트레이닝 주사위게임3 JAVA
import java.util.*; class Solution { public int solution(int a, int b, int c, int d) { // 주사위 배열 생성, 정렬 Integer[] dice = {a, b, c, d}; Arrays.sort(dice); // 중복 제거 Set set = new HashSet(Arrays.asList(dice)); Integer[] diceList = set.toArray(new Integer[0]); // 네 주사위의 숫자가 같다면 (p, p, p, p) if(diceList.length == 1) { return 1111 * diceList[0]; }else if(diceList.length == 2) { int p = diceList[0]; in..
-
java
Arrays로 배열 다루기
배열 출력 1차원 배열 : Arrays.toString() int[] arr = {0, 1, 2, 3, 4}; System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4] 2차원 배열 : Arrays.deepToString() int[][] arr2D = {{11, 12}, {21, 22}}; System.out.println(Arrays.deepToString(arr2D)); // [[11, 12], [21, 22]] 배열 비교 1차원 배열 : Arrays.equals() 2차원 배열 : Arrays.deepEquals() String[][] str2D = {{"aaa", "bbb"}, {"AAA", "BBB"}}; String[][] str2D2 = {..
-
java
기본형 데이터 타입 표현 범위
Byte \ 데이터 타입 논리형 문자형 정수형 실수형 1 boolean byte 2 char short 4 int float 8 long double 1byte = 8bit 부호 없는 정수의 범위 char : 2byte : 0 ~ 2^16 - 1 = 0 ~ 65535 부호 있는 정수의 범위 short : 2byte : -2^(16-1) ~ 2^(16-1) -1 = -32768 ~ 32767
-
삽질 기록
Request processing failed; nested exception is org.apache.tiles.request.render.CannotRenderException
Request processing failed; nested exception is org.apache.tiles.request.render.CannotRenderException: 행 [31]에서 [WEB-INF/views/tiles/layout.jsp]을(를) 처리하는 중 예외 발생 새로 생성한 페이지만 불러와지지 않는 오류가 발생하였다. tiles의 body 페이지가 불러와지지 않는 것.. 전에도 한 번 이런 오류가 발생하였는데, 그때는 데이터를 불러오는 쪽에서 오류가 났던 거였는데 이번엔 아무리 주석처리해도 불러와지지 않음. 해결 알고보니 오타때문이었네요..
-
주절주절
첫 포스팅
블로그 변경 Naver Blog에서 Tistory로 변경하였습니다. 예전 블로그 주소 개발자 과정 수강 당시 필기한 내용은 아래 블로그에 있습니다. heiio worid : 네이버 블로그 개발 blog.naver.com System.out.println("Heiio, Worid!");