Java(10)
-
IntelliJ @RequiredArgsConstructor 에러 해결
오류 아래 사진과 같이 build.gralde 파일에 lombok 의존성을 추가했다. 하지만 IntelliJ에서는 lombok 어노테이션을 인식하지 못하고, final 키워드의 멤버변수가 초기화 되지 않았다고 인식하여 문법 오류(빨간 줄)를 표시한다. 그런데 프로젝트를 빌드해보면 또 빌드가 잘된다. Foo.class 파일을 보면 final 멤버변수 Bar를 초기화하는 생성자가 잘 생성되어있다. 실제로는 lombok의 @RequiredArgsConstructor 이 잘동작한 것이다. 원인 lombok은 자바의 Annotation Processor를 사용하여 동작한다. lombok의 어노테이션(@Getter, @Setter, @RequiredArgsConstructor 등)은 컴파일 시점에 분석 되고, 각 ..
2023.12.07 -
백기선 자바 스터디 1기 9주차
목표 자바의 예외 처리에 대해 학습하세요. 학습할 것 프로그램 오류란? Exception과 Error의 차이는? 자바가 제공하는 예외 계층 구조 RuntimeException과 RE가 아닌 것의 차이는? 자바에서 예외 처리 방법 (try, catch, throw, thorws, finally) 커스텀한 예외 만드는 방법 프로그램 오류란? 프로그램이 실행 중 어떠한 원인에 의해 오작동 하거나 비정상적으로 종료되는 경우를 프로그램 에러 또는 오류라고 한다. 이것을 발생시점에 따라 '컴파일 에러'와 '런타임 에러'로 나눌 수 있다. 컴파일 에러란 소스코드 컴파일 시점에 컴파일러가 문법 오류가 있다면 발생 시키는 오류이다. 런타임 에러란 프로그램 실행 도중 발생하는 에러로 자바에서는 런타임 에러를 '에러(err..
2023.10.22 -
백기선 자바 스터디 1기 8주차
목표 자바의 인터페이스에 대해 학습하세요. 학습할 것 인터페이스 정의하는 방법 인터페이스 구현하는 방법 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법 인터페이스 상속 인터페이스의 기본 메소드 (Default Method), 자바 8 인터페이스의 static 메소드, 자바 8 인터페이스의 private 메소드, 자바 9 인터페이스 정의하는 방법 인터페이스는 일종의 추상 클래스이다. 단, 추상 클래스보다 추상화 정도가 높아서 추상 클래스와 달리 일반 메소드 또는 멤버변수 멤버로 가질 수 없다. 오직 추상 메소드(abstract)와 상수(final)만을 멤버로 가질 수 있다. ※ 자바 8버전부터 default 예약어를 통해 일반 메소드 구현이 가능하다. 인터페이스는 다음과 같이 정의가 가능하다. inter..
2023.10.19 -
백기선 자바 스터디 1기 7주차
목표 자바의 패키지에 대해 학습하세요. 학습할 것 package 키워드 import 키워드 클래스패스 CLASSPATH 환경변수 -classpath 옵션 접근지시자 package 키워드 패키지(package)는 비슷한 성격의 자바 클래스들을 모아 놓은 자바의 디렉토리이다. 패키지를 사용하면 비슷한 성격의 클래스들끼리 묶을 수 있어 클래스의 분류가 용이하다. 그리고 다른 사람이 작성한 자바 클래스나 라이브러리를 사용할 경우 클래스명이 동일한 경우도 발생할 수 있을 것이다. 하지만 패키지명이 다르면 클래스명이 동일해도 충돌없이 사용할 수 있다. 위의 사진과 같이 pack1, pack2 패키지 하위에 Foo라는 동일한 이름의 클래스가 있지만 클래스 앞에 패키지를 명시해주어 main함수 내에서 두 클래스 모두 ..
2022.05.18 -
백기선 자바 스터디 1기 6주차
목표 자바의 상속에 대해 학습하세요. 학습할 것 자바 상속의 특징 super 키워드 메소드 오버라이딩 다이나믹 메소드 디스패치 (Dynamic Method Dispatch) 추상 클래스 final 키워드 Object 클래스 자바 상속의 특징 자바에는 자식 클래스가 부모 클래스의 멤버를 그대로 물려받을 수 있는 상속(Inheritance)이라는 개념이 있다. 상속은 코드의 재사용과 변경을 용이하게 해준다. 자바에서 상속은 자식 클래스에서 클래스 명 뒤에 extends 키워드를 적고 부모 클래스의 클래스 명을 적어주면 된다. class Parent { // ... } class Child extends Parent { // ... } 위와 같이 상속을 받게 되면 자식 클래스는 부모 클래스의 private 멤..
2022.05.12 -
백기선 자바 스터디 1기 5주차
목표 자바의 Class에 대해 학습하세요. 학습할 것 클래스 정의하는 방법 객체 만드는 방법 (new 키워드 이해하기) 메소드 정의하는 방법 생성자 정의하는 방법 this 키워드 이해하기 과제 int 값을 가지고 있는 이진 트리를 나타내는 Node 라는 클래스를 정의하세요. int value, Node left, Node right 를 가지고 있어야 합니다. BinaryTree 라는 클래스를 정의하고 주어진 노드를 기준으로 출력하는 bfs(Node node)와 dfs(Node node) 메소드를 구현하세요. DFS는 왼쪽, 루트, 오른쪽 순으로 순회하세요. 클래스 정의하는 방법 객체 지향 프로그래밍(OOP, Object-Oriented Programming)에서는 모든 데이터를 객체로 취급한다. 객체란 ..
2022.05.11