공부방/JAVA 25

예외처리 , 그거 어떻게 하는건데

프로그램을 실행 중 어떤 원인에 의해서 오작동하거나 비정상적으로 종료되는 경우가 있다. 이를 발생 시점에 따라 '컴파일 에러' 와 '런타임에러'로 나눌 수 있다. 컴파일 에러는 소스코드를 컴파일하면 에러를 잡아준다. 예를들면 코드 오타가 있거나 자료형을 잘못 적었거나 등 이런것은 개발자가 쉽게 바로 에러잡아주는 곳에서 고치고 다시 실행하면 된다. '컴파일에러'는 IDE에서 많이 도와주고 있으니 이번 글에서 다룰 내용이 아니다. 반면 '런타임 에러'는 상황이 다르다. 프로그램 실행 도중 발생되는 에러라 컴파일러가 에러를 잡아줄 수가 없다. 즉 개발자인 우리가 이에 대한 적절한 코드를 미리 작성해놓음으로써 프로그램의 비정상적인 종료를 막을 수 있다. 예외처리는 바로 '런타임에러'를 잡기 위한 방식이다. "컴..

공부방/JAVA 2023.09.12

자바 인터페이스 - 백기선 자바라이브스터디

인터페이스 정의하는 방법 인터페이스란 객체와 객체 사이에서 일어나는 상호 작용의 매개로 쓰인다. 누군가는 이를 다리 역할로 볼 수 있다고 하며 실제 구현 클래스의 설계도라고 부르기도 한다. 인터페이스의 선언은 예약어로 class가 아닌 interface 키워드를 사용하며, 메소드의 접근 제어자로는 자바8 기준으로는 public, default, static이 가능하며 자바9부터는 private도 가능해졌다 각각은 뒤에서 자세히 살펴본다 상수 : 인터페이스에서 제공한 값을 바꾸지 말고 그대로 사용 추상메소드 : 선언만 하고 실제 구현 클래스에서는 무조건 오버라이딩 하여 구현 디폴트메소드 : 인터페이스에서 직접 구현, 구현 클래스는 해당 메소드를 오버라이딩 하지 않아도 된다 스태틱메소드 : 인터페이스의 스태..

공부방/JAVA 2023.09.07

서버 에러를 빠르게 발견하고 해결하는 방법: 로그 분석의 핵심

프로젝트를 로컬에서 단위,통합 테스트를 하고 배포를 하면 끝인줄 알았던 나는 개발서버에서 간단한 에러가 터져도 확인하기가 번거로웠다. aws 인스턴스에서 서버를 돌렸던 나는 에러를 확인하기 위해 다음과 같은 행위를 했다.(다시는 이러지 않겠다는 마음으로 써본다) 1. vim nohup.out 실행 : 참고로 nohup은 터미널이나 세션이 종료되어도 해당 프로세스가 종료되지 않고 동작하는 방식으로 nohup 쉘스크립트에 jar파일을 실행하도록 명령어를 넣고 구동 시켰다. 그리고 nohup.out은 nohup 실행 시 log파일을 생성 시킨다. 나는 이 부분에서 굉장히 빨리 로그파일을 생성할줄 알았지만 기대와 달리 상당히 오랜 시간이 걸리며 자꾸 터미널이 멈춘다. 여기서 굉장히 시간도 빼앗기고 결국 exce..

공부방/JAVA 2023.09.02

gradle로 빌드한다는 것은 무슨 말이고 gradle wrapper는 무엇일까

서론 "Gradle 빌드에 권장되는 사용 방법은 Gradle Wrapper를 사용하는 것이다." 처음에 이 문장을 보고 무슨 말인지 전혀 몰랐다. 그때 내가 아는 지식으로는 gradle은 의존성을 받아오는 녀석이며 컴파일 시점과 런타임 시점때 해당 외부 라이브러리들을 꺼내어서 쓴다는 얕은 지식으로만 이해를 했다. 이번 기회에 한번 알아보겠다. Gradle 빌드란 소스코드를 컴파일, 테스트, 정적 분석 등을 실행하여 실행 가능한 애플리케이션으로 만들어주는 과정 이다 이전에 다양한 라이브러리들이 생기고 개발자가 직접 라이브러리들을 다운로드하고 추가해야하는 번거로움이 있었으며, 개발자들 간의 버전관리도 어려우며 다운받은 jar파일의 보안 위험도 있었다 이런 문제를 해결하기 위해서 빌드 도구가 생겼다 빌드 도구..

공부방/JAVA 2023.08.27

패키지 - 백기선 자바라이브스터디

package 키워드 클래스의 묶음 또는 물리적으로 하나의 디렉터리 서로 관련되어 있는 것을 묶음으로써 효율적으로 관리 FQCN(Fully Qualified Class Name) : FQCN은 클래스가 속한 패키지명까지 모두 포함한 이름을 의미 java.lang.String s = new java.lang.String(); 이 있다. 물론 java.lang 패키지는 자동으로 임포트 되기 때문에 java.lang.String과 같이 선언할 필요는 없다 점(.)을 구분자로 하여 계층구조로 구성 모든 클래스는 반드시 하나의 패키지에 속해야 한다 만약 패키지를 선언하지 않으면 자바에서 기본적으로 제공하는 이름없는패키지(unnamed package)에 속하게 된다 규칙 소문자를 원칙으로 함 소스코드에서 주석과 공..

공부방/JAVA 2023.08.24

상속 - 백기선 자바라이브스터디

문제제기 예를들어 상속이라는 개념을 모르는 상태에서 강아지와 고양이 클래스를 만들어 보겠습니다. 강아지 고양이 공통적인게 눈에 띕니다. 이름, 종류 의 필드도 같고 소리를 낸다는 것과 먹는다는 것은 공통적인 행위 입니다. 그렇다면 이 부분은 이제 상속의 개념을 적용할 수가 있습니다 또한 name과 종류는 Animal의 부모 클래스가 가지고 있으니 생성자를 통해 이름과 종류를 받아서 저장하고 bark()는 Dog와 Cat마다 소리내는 방식이 다르니 @Override 시키면 될 거 같습니다. 아래는 이러한 요구사항을 가지고 만들어낸 결과 입니다. Animal.java Dog.java Cat.java 보다싶이 Animal이라는 클래스의 공통 필드와 메서드를 적용받기위해 extends라는 키워드를 사용하였고 s..

공부방/JAVA 2023.08.19

클래스와 이진트리 구현 - 백기선 자바라이브스터디

클래스와 객체 클래스는 인스턴스 생성을 위한 청사진 또는 템플릿 역할을 합니다. 인스턴스가 보유하게 될 구조와 동작을 정의합니다. 인스턴스가 생성되면 해당 클래스에 정의된 데이터와 동작으로 초기화 됩니다. 클래스와 인스턴스 간의 이러한 관계는 코드 재사용성을 가능하게 하고 캡슐화, 상속, 다형성의 원칙을 촉진합니다. 클래스 정의하는 방법 클래스의 구조 멤버변수(member variable) : 멤버변수는 해당 클래스 객체의 속성이며, 두가지 형식이 있습니다 클래스 변수: 클래스의 모든 인스턴스간에 공유되는 static 변수 입니다. 그렇기 때문에 heap영역이 아닌 data의 static영역에 할당되고 gc의 관리를 받지 않습니다. 인스턴스 변수: 각 인스턴스가 고유한 값 집합을 유지할 수 있도록 합니다..

공부방/JAVA 2023.08.12

제어문 - 백기선 자바라이브스터디

조건문 if문 간단한 의사 결정 문입니다. 명령문 또는 명령문 블록의 실행 여부를 결정하는 데 사용됩니다. 주어진 조건이 참이면 명령문 블록이 실행되고 그렇지 않으면 명령문 블록을 건너 뜁니다. 조건을 실행하는 동안 조건이 참이면 해당 명령문이 실행되고 나머지 코드는 건너 뜁니다. 어떤 조건도 참이 아니면 마지막 else 문이 실행됩니다. if(condition) { // If condition is true then this block of statements will be executed } else if(condition) { // If condition is true then this block of statements will be executed } else { // If none of con..

공부방/JAVA 2023.08.06

LinkedList,Stack,Queue 구현 및 테스트 - 백기선 자바라이브스터디

LinkedList란 링크드리스트는 불연속적으로 존재하는 데이터를 서로 연결(link)한 형태로 구성되어 있습니다 위의 그림에서 알 수 있듯이 링크드 리스트의 각 요소(node)들은 자신과 연결된 다음 요소에 대한 참조(주소값)와 데이터로 구성되어 있습니다 class Node { Node next; // 다음 요소의 주소를 저장 Object obj; // 데이터를 저장 } 삭제 링크드 리스트의 삭제는 배열보다 간단합니다. 삭제하고자 하는 요소의 이전 요소가 삭제하고자 하는 요소의 다음 요소를 참조하도록 변경하기만 하면 됩니다. 단지 하나의 참조만 변경하면 삭제가 이루어지는 것입니다. 배열은 삭제를 하면 다른 요소들이 앞으로 땡겨져야 하기 때문에 복사가 일어나지만 : O(n) 링크드리스트는 그런 과정이 필..

공부방/JAVA 2023.08.06

JUnit5을 이용한 테스트코드 작성 방법 - 2편

JUnit 5: 테스트 반복하기 @RepeatedTest 반복 테스트를 위한 테스트 템플릿 입니다 다음과 같이 인자로 value는 10을 전달하면 총 10번 테스트를 반복하며 테스트할때 정확히 볼 수 있게 name 인자값도 정할 수 있습니다. 또한 RepetitionInfo라는 클래스를 활용해서 현재 반복 횟수와 총 반복 횟수 등의 정보를 제공합니다 실행 결과 @ParameterizedTest 와 @ValueSource 테스트에 여러 매개변수를 대입해가며 반복 실행할 수 있습니다 @ParameterizedTest 를 이용한 파라미터화된 테스트는 하나의 테스트를 각기 다른 인수로 여러 번 실행할 수 있게 합니다 파라미터화 된 테스트를 정의하려면 반드시 하나 이상의 source를 선언해야 합니다 출력 결과 ..

공부방/JAVA 2023.08.05