본문 바로가기

개발 기록

(42)
[디스코드 봇 개발] - #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/클린 코드] 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 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..
[디스코드 봇 개발] - #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/클린 코드] 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이 가리키는 곳의 바로 위쪽에 저장이..