코드class Solution { public static void main(String[] args) { Solution solution = new Solution(); System.out.println(solution.solution("CBD", new String[]{"BACDE", "CBADF", "AECB", "BDA"})); System.out.println("================================"); } public int solution(String skill, String[] skill_trees) { int answer = 0; for (String skillTree : skill_trees) { System.out.println("skillTree = " + sk..
지라 이슈 생성 가능여부 일단 지라에서만은 불가능하다 Zapier 를 통한 이슈 생성 가능 여부 확인 자체 ai 로 뭐 대충은 만들수있긴 한것 같다. 일단 지라와 깃허브 계정간의 연동이 필요하다 지라 계정을 연동하고 지라에서 이슈를 만드는 경우 어떤 프로젝트에서 어떤 Status 를 가지는 경우 동작하는지 경우를 정의한다. 트리거에 대해 api 호출이 제대로 되는지 테스트 해볼 수 있다. 깃허브 계정과 연동하고 깃허브의 이슈에 어떤 내용이 들어가면 될지 각각 매핑을 해주면 된다. 이후에 지라에서 이슈를 생성하면 즉각 반영은 아니긴한데, Zapier 에서 인식하여 automation 을 수행하여 깃허브에 해당 이슈가 생성된다. Uploaded by N2T
3중 따옴표 문자열이스케이프를 피하고 여러 줄의 문자열을 쉽게 작성가능하게 해준다Java17 에서도 등장했던걸로 기억한다.val kotlinLogo = """ .| // .| // .|/ \""" fun main() { println(kotlinLogo.trimMargin(".")) } | // | // |/ \이게 뭔데..?코틀린 로고라는데..귀찮다 그냥 알아 먹도록trimMargin지정된 마커 . 앞의 공백을 제거해서여러 줄의 문자열을 더 깔끔하게 출력할 수 있다.여러 줄 문자열의 특징문자 이스케이프 불필요\n, \t 같은 이스케이프 문자 사용할 필요가 없어짐줄 바꿈이 포함됨들여쓰기의 제어trimMargin 함수로 들여쓰기 관리가 가능해진다.문자열 템플릿과 결합$ 같은 문자열을 안에 직접 넣을 수 없..
fun saveUser(user: User) { if (user.name.isEmpty()) { throw IllegalArgumentException("Can't save user ${user.id}: empty Name") } if (user.address.isEmpty()) { throw IllegalArgumentException("Can't save user ${user.id}: empty Address") } // Save user to the database } fun main() { val user = User(1, "John", 25, "Main St.") saveUser(user) }에서 이름과 주소의 유효성 검사가 중복된다.해당 부분을 로컬 함수로 개선해보자fun saveUser(us..
https://www.youtube.com/watch?v=th7n1rmlO4I클린코드 를 종교 처럼 따르지는 말아야한다.말그대로 스프링, 노드, Next 등의 프레임워크의 상황에 따라 주석이 필요한 경우가 있고코드를 어떻게든 포장하려고 시도하는 순간디버깅시에 엄청나게 손가락이 아픈 순간이 온다.물론 포장을 잘 하는 경우에 테스트 코드를 단위별로 이쁘게 시도할 수 있다는 장점이 있는 건 뭐..의심의 여지가 없다하지만초급 레벨의 개발자의 경우 잘 짠다 라는 레벨까지 다다르기 꽤나 어렵다초급 개발자가 클린 코드에 대해 이해를 잘못하거나 맹신하는 경우오히려 유지보수성을 떨어뜨리는 문제가 발생할 수 있다.초급 레벨의 개발자가 클린 코드를 이해했다? 객사오나 오브젝트를 이해했다?나도 하급 개발자지만, 솔직히 난 믿..
인터페이스 정의 및 구현 인터페이스 정의 interface Clickable { fun click() } click은 추상 메서드임. 인터페이스 구현 interface Clickable { fun click() } class Button : Clickable { override fun click() = println("I was clicked") } fun main() { Button().click() } I was clicked extends 와 implements 대신 콜론 (: ) 을 사용하여 클래스의 확장과 인터페이스의 구현을 처리한다. override 키워드는 상위 클래스나 인터페이스의 메서드를 오버라이딩할때 필수적으로 사용됨. 디폴트 구현과 다중 인터페이스 구현 디폴트 구현을 인터페이스에 제공..