gradle의 build, run 이런것들은 gradle이 수행하는 명령단위, task라고함 그래서 gradle은 task를 수행함으로써 내용이 수행됨. build.gradle에 이 task가 등록이 되어있다. 근데 build나 run에 대한 task는 기록되어있지 않은데, 기본적으로 gradle init할때 우리는 java로 하기로 했으니까 그것에 대한 build, run은 plugins을 통해 다 셋팅되게 된다. gradle tasks 이 명령어를 통해 gradle의 task들을 전부 확인할 수 있다. 참고 : 인텔리제이 단축키 alt + enter : 빨간줄 생길때 자동완성해줌 alt + 1 : 소스코드에서 왼쪽 프로젝트 창으로 커서가 이동함. esc 누르면 다시 소스코드로 넘어옴 ctrl + n ..
자바 8에서 함수라는 단위가 계속 언급되고 있다. 거기서 함수형 인터페이스 라는 키워드가 등장하게 된다. 우선 이 함수형 인터페이스가 무엇인지 살펴보자. // 특별히 함수형 인터페이스라는 걸 알려주기 위한 애노테이션을 달아주기도 함 @FunctionalInterface public interface MyRunnable { void run(); // 추상 메소드가 하나밖에 없는 메소드 == 함수형 인터페이스 } // 얘는 추상 메소드가 2개이므로 함수형 인터페이스가 될 수 없다. interface MyRunnable2 { void run1(); void run2(); } // 얘도 함수형 인터페이스다. 왜냐면 '추상' 메소드는 하나이기 때문이다. // default, static method가 있는 것은 ..
현재 인터페이스는 굉장히 많은 형태로 사용되고 있다. 그러다보니 인터페이스의 단점들이 드러나기 시작하였고 그것을 해결하기위해 나온것이 디폴트 메서드(default method) 이다. 우선 default method의 역할을 살펴보자. 디폴트 메소드를 사용하면 인터페이스가 구현체(메소드의 구현부)를 가질 수 있게 된다. interface MyInterface { // 추상 메소드로만 이뤄진 클래스 == 인터페이스 void method1(); // 구현이 없다 : 추상 메소드 default void sayHello() { // 구현이 있다 (자바 8 부터 이런 구현 메소드를 인터페이스가 가질 수 있다) 대신 default 키워드를 써줘야 함 System.out.println("Hello World"); }..
Object 클래스는 모든 클래스의 최고 조상이므로 모든 클래스는 Object클래스 메소드를 사용할 수 있다. 그중에서 가장 많이쓰이는 메소드인 equals, hashCode, toString를 정리해 보았다. 1. equals 아래 코드는 Object 클래스에 정의 되어 있는 equals 메서드의 실제 내용이다. public boolean equals(Object obj) { return (this == obj) // 주소 비교 } 즉, 객체 자신(this)과 주어진 객체(obj)의 주소값을 비교한다. public class Main { public static void main(String[] args) { Value v1 = new Value(10); Value v2 = new Value(10); ..
한창 git을 공부하면서 들었던 의문이 있었다. main 브랜치에서 feat1 브랜치를 따고 feat1에서 새 파일을 만들고 커밋을 하지않고 다시 main 브랜치로 checkout하면 어떻게 될 까? 결론은 feat1 브랜치나 main브랜치나 새 파일을 공유하게 된다. 여기서 내가 나름 생각한 결론은 내가 만든 새 파일은 add를 했든 안했든 commit으로 인한 이력이 남지 않기 때문에(git이 아직 관리를 하지 않음) 단지 working directory에 머무느냐 stage에 머무느냐와 관계없이 그냥 로컬에 남아있기 때문에 엄밀히 말해서 checkout을 했다고 하더라도 파일이 그대로 공유가 된다. 근데 만약 feat1 브랜치에서 newfile.md 파일을 만들고 다음과 같이 글을 작성했다고 가정하..
자바에서 인터페이스는 추상클래스처럼 추상 메서드를 갖는다. 추상 클래스와 차이점은 멤버 변수를 구성원으로 가질 수 없고 메서드는 구현되어 있지 않아야 한다. 보통 인터페이스를 밑그림만 그려진 '기본 설계도' 라고 한다. 그럼 도대체 이러한 특성을 가지는 인터페이스를 왜 사용하는 걸까? 1. 구현을 강제 시킨다. interface Login { void login(); } public class KakaoLogin implements Login{ @Override public void login() { System.out.println("카카오로 로그인 합니다."); } } 위 코드와 같이 Login을 implements하게 될 경우 Login의 메서드인 login을 반드시 KakaoLogin에서 구현해 ..
StringBuffer와 StringBuilder의 차이를 보기전에 먼저 String 객체의 특성과 StringBuffer객체의 특성의 차이점을 먼저 살펴보아야 한다. 자바에서는 문자열을 String 객체로 많이 처리 한다. 특히, 문자열 리터럴의 경우 프로그램 실행시 자동으로 생성이 되는데, 이는 Constant Pool(상수 저장소)에 저장된다. 이때, 문자열들을 서로 결합하기위에 += 연산을 하게 되는데, String 객체는 불변(immutable) 하기 때문에 += 연산을 수행할 때마다 constant pool에 새로운 문자열 객체가 생겨나게 된다. 이렇게 되면 복잡한 문자열을 계산할때 쓸때없는 문자열 객체가 계속 쌓이게 되므로 비효율 적이다. 이를 해결하기 위한 것이 StringBuffer 객체..
이전부터 작성해야지 했던 Today I Learned에 대해서 조금 깊게 생각해 보았다. 공부 해야할 것들은 많고 이를 모두 멋지게 정리하고 싶었다. 여기서 문제가 발생 했는데 매일 공부한다는 명목으로 Today I Learned를 적으려고 하였는데, 매번 공부하는 카테고리가 바뀌다 보니 (스프링을 공부했다가 파이썬으로 코딩테스트를 풀었다가 ..... 등등) 글쓰는 것에 통일성이 없어 보였다. 기록을 남기고자 할 때, 내가 고민헀던 흔적이나 고심하며 작성한 코드들이 없이 단순히 강의를 통해서 배운 내용들을 필기 하는 느낌이 강했다. 어느 순간 부터 기록을 위한 기록이 되어서 영양가 없는 글이 쌓이게 된 것 같았다. 이번에 프로그래머스 데브코스에서 배움에 대한 기록 주제에 대한 발표를 듣고 좀 더 고심해서..
윈도우의 git bash에서는 기본적으로 gradle 명령어가 적용되어 있지 않다. 따라서 gradle을 설치하는 방법을 살펴보자 우선 jdk가 설치되어 있어야하고, SDKMAN을 사용하여 설치하는것을 권장한다고 함. 1. SDKMAN 설치 (http://sdkman.io/install.html) $ curl -s "https://get.sdkman.io"|bash $ source "$HOME/.sdkman/bin/sdkman-init.sh" sdk help를 통해 도움말이 나오면 정상적으로 sdkman이 설치 된 것이다. 2. gradle 설치(http://sdkman.io/usage.html) $ sdk install gradle 이후 sdk list gradle로 현재 버전과 설치 버전들을 확인할 ..
윈도우에서 git bash zip 명령을 찾을 수없다고 한다면? git bash를 이용하여 zip 명령어를 이용하면 command not found라고 뜬다. 이때는 C:\Program Files\Git\usr\bin 경로에 실행파일을 붙여 넣어줘야한다. 우선 https://sourceforge.net/projects/gnuwin32/files/ 로 이동한다. 저 zip 폴더에서 zip-3.0-bin.zip 파일을 다운받는다. 압축을 푼다음 zip.exe 실행파일을 C:\Program Files\Git\usr\bin 경로에 붙여넣어주면 zip 명령어를 사용할 수 있게 된다. 위와 비슷한 방식으로 tree 명령어 또한 사용할 수 있다. http://gnuwin32.sourceforge.net/package..
우선 application.yml 설정파일을 생성하여 다음과 같이 세팅해준다. db 접근하는 url을 설정해주고 jpa의 hibernate가 ddl을 자동으로 만들어주는 셋팅으로 create 모드를 적용한다. (현업에서는 테이블이 갱신되기 때문에 절때 사용하면 안되지만 지금은 연습이기 때문에 create로 설정한다) 그림에서 본것과 같이 hibernate의 show_sql을 사용하면 System.out.println으로 처리되기 때문에 실제 운영상황에서는 로깅으로 처리해야하므로 다음의 셋팅을 사용하지 않는다. 대신 밑에 logging 으로 hibernate.SQL을 debug모드로 설정하면 로그레벨을 디버그로 볼 수 있다. 이러한 설정들은 사실 전부 스프링 공식 사이트에서 하나씩 보며 공부하면 충분히 해..