전체 글 89

[자바 스터디] 12주차 : 애노테이션

어노테이션이란? 어노테이션은 사전적으로는 '주석' 이라는 의미이다. 자바에서 어노테이션은 클래스, 인터페이스, 메소드, 필드 등에 붙어서 컴파일러와 JVM에게 추가적인 정보(metadata)를 제공하는 역할을 한다. 어노테이션이 만들어진 이유 어노테이션 등장 이전에는 XML을 사용해 소스 코드의 메타 데이터를 작성하고 유지했다. 시스템과 분리되어 있으므로 어떤 면에서는 유지보수성이 좋다고 할 수 있으나, 프로그램이 방대해짐에 따라 오히려 유지보수가 어려워지는 문제가 발생했다. 어노테이션은 소스 코드에 바로 메타데이터를 작성할 수 있으므로 보다 직관적으로 메타 데이터를 작성할 수 있다. 추가로, 어노테이션은 어노테이션 프로세스를 통해 컴파일 타임에 코드나 기타 파일의 생성 등 작업이 가능하다. 어노테이션이..

스터디/자바 2023.02.12

[자바 스터디] 11주차 : Enum

enum 이란? enum 타입은 특수한 데이터 타입으로, 미리 지정된 상수만 대입할 수 있다. 미리 정의한 enum 클래스 내의 상수만 enum 타입에 대입될 수 있다. 예를 들어 방위(NORTH, SOUTH, EAST, WEST)나 요일(MONDAY, …) 등의 상수를 미리 정의하는 용도로 사용 가능하다. Enum 클래스는 가장 간단하게는 아래와 같이 정의할 수 있다. public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY } Enum에 정의된 상수들은 각각 해당 enum 클래스의 객체이다. 이렇게 미리 정의된 상수만 객체로 사용할 수 있게 하여 enum 타입에 미리 정의된 값만 대입될 수 있게 하는 것이다. (e..

스터디/자바 2023.02.12

[자바 스터디] 10주차 : 멀티쓰레드 프로그래밍

Process와 Thread [출처 - https://gyoogle.dev/blog/computer-science/operating-system/Process%20vs%20Thread.html] Process 메모리에서 실행되는 프로그램 메인 쓰레드 포함 최소 1개의 쓰레드를 갖는다 프로세스는 각각 별도의 주소 공간에 할당된다 (독립적) Thread 프로세스 안에서 실행되는 여러 흐름 단위 하나의 프로세스 안에 여러 쓰레드를 구성해 각 쓰레드가 각각의 작업을 맡아서 처리 쓰레드가 있어 다수의 작업을 동시에 처리할 수 있다 쓰레드는 Stack 만 별도로 할당 받고 나머지 영역은 프로세스의 것을 서로 공유한다 Context Switching에 들어가는 오버헤드가 적어 각각을 별도의 프로세스로 구성하는 것보다..

스터디/자바 2023.02.06

[자바 스터디] 9주차 : 예외 처리

자바에서 예외 처리 방법 (try, catch, throw, throws, finally) 예외 처리의 목적 프로그램이 실행되다보면, 여러가지 이유로 인해 예외가 발생한다 이러한 상황이 발생했을 때 예외 처리 로직을 미리 작성해둠으로써 프로그램의 비정상적인 종료를 막고 프로그램의 상태를 정상 상태로 돌려놓기 위함 try-catch 기본적으로 예외는 try-catch 문을 통해 처리할 수 있다. try {} 에 예외가 발생가능한 로직을 넣고 catch(Exception e) {} 에 e 예외 발생 시 수행할 로직을 넣는다 발생한 예외가 catch() 문 괄호 안의 예외 클래스 하위의 클래스이면 해당 catch() {} 본문이 수행된다. 만약 발생한 예외가 최초로 만난 catch() 문 괄호 안의 예외 클래..

스터디/자바 2023.02.05

[자바 스터디] 8주차 : 인터페이스

추상 클래스와 인터페이스 자바8부터 인터페이스에 default, static 메서드를 정의할 수 있게 되면서 추상 클래스와 인터페이스를 어떨 때 어떻게 구분해서 사용해야 하는지가 혼란스러워졌다. 이에 인터페이스에 대해 공부하기 전에 추상 클래스와의 차이를 먼저 정리해보았다. 앞선 주차 스터디에서 추상 클래스에 대해서는 이미 학습했었는데, 추상 클래스는 여러 클래스가 가진 공통 속성을 추출하기 위해 사용한다고 했다. K5, 소나타 등의 클래스가 자동차 라는 추상 클래스로 묶일 수 있는 등의 예시를 생각할 수 있을 것 같다. 이들을 추상 클래스로 묶음으로써 클래스 별로 다른 부분을 제외하고 공통적인 속성과 행위를 하나의 클래스에서 관리할 수 있다는 장점이 생기게 된다. 공통점 이 둘의 공통점은 아래와 같다...

스터디/자바 2023.01.30

[자바 스터디] 7주차 : 패키지

package 키워드 패키지란 자바에서 패키지는 연관있는 클래스들을 묶는데에 사용된다 이를 사용하면 name conflict를 막고 보다 maintainable한 코드를 작성할 수 있다 패키지 종류 Build-in Packages (JAVA API 로부터의 패키지) 자바 8까지 rt.jar 에 포함된 라이브러리를 포함 자바 9이상부터는 jmods 디렉토리에 존재 BootStrap ClassLoader가 있기 때문에 Built-in 패키지를 사용할 수 있는 것 User-defined Packages (개발자가 직접 생성한 패키지) FQCN Full Qualified Class Name의 약자 모든 클래스에는 정의된 클래스 이름 + 패키지 이름이 있으며 이 둘을 합쳐야 완전하게 하나의 클래스를 지칭하게 됨 ..

스터디/자바 2023.01.30

[자바 스터디] 6주차 : 상속

자바 상속의 특징 상속 한 클래스(자식 클래스)가 부모 클래스의 모든 속성(필드)과 행동(메소드)를 취득하는 메커니즘 즉, 부모 클래스를 기반으로 새로운 클래스를 만들 수 있다 OOP의 중요한 요소 중 하나 상속을 사용하는 이유 메소드 오버라이딩 (runtime polymorphism이 가능해진다) 코드 재사용성 상속 문법 extends 키워드를 사용 public class Parent {} --- public class Child extends Parent {} 상속 구조 자바에서 가능한 구조 Single Multilevel Hierarchical public class ClassA {...} // Single public class ClassB extends ClassA {...} // Multile..

스터디/자바 2023.01.23

[자바 스터디] 5주차 : 클래스

클래스란? 클래스는 공통의 특징(characteristics)/행동(behavior)/속성(properties, attributes)을 공유하는 객체들의 집합 클래스는 다양한 타입의 변수들과 메소드의 그룹 클래스가 포함하는 것들 data member (field) - 객체의 데이터가 저장되는 곳 method - 객체의 동작에 해당 constructor - new 연산자로 호출되는 메소드로 객체 생성 시 필드의 초기화를 담당 nested class - 클래스 내부에 또 다른 클래스를 선언할 수 있음 interface (!!) 내부 클래스 (Inner Class) 내부 클래스는 외부 클래스의 private을 포함한 멤버들에 쉽게 접근이 가능하며 연관된 클래스를 그룹핑할 수 있다는 장점 때문에 사용 내부 클래..

스터디/자바 2023.01.23

[자바 스터디] 3, 4주차 : 연산자, 제어문

3주차 - 연산자 산술 연산자 변수와 데이터에 대한 산술 연산을 수행하는데 사용됨 연산자 수행 연산 + 덧셈 - 뺄셈 * 곱셈 / 나눗셈 (몫만 취함) % Modulo 연산 (나누기 연산 후 나머지만 취함) Overflow 가능성 연산 결과가 피연산자 타입의 저장 가능 범위를 벗어나게 되면 오버플로우가 발생, 의도치 않은 값이 변수에 저장됨 int a = 2_100_000_000; int b = 2_000_000_000; System.out.println(a + b); // -194967296 따라서 연산 시, 오버플로우 발생 가능성을 염두에 두어야 함 /와 % /는 몫만 취하고, %는 나머지만 취함 즉, 6 / 4 = 1, 6 % 4 = 2. 나눗셈 연산 시 /의 반환 타입 a / b 에서 a와 b가 ..

스터디/자바 2023.01.22

NEXTSTEP TDD, 클린 코드 with Java 피드백 정리 및 후기

후기 작년에 쎼트렉아이에서 인턴을 하며 자바에 대해 더 깊게 공부하고 좋은 코드를 작성할 수 있는 능력을 갖추고 싶다는 생각을 많이 했었다. 학습 방법을 찾다가 넥스트스텝의 'TDD, 클린 코드 with Java' 과정이 좋다는 이야기를 많이 들어 신청했고 약 4달간 수강했다. 미션을 주고 PR로 제출하면 코드 리뷰 방식으로 피드백을 받고 계속해서 코드를 개선해나가는 과정이기 때문에 짧은 시간이 많은 것들을 배웠다고 느꼈다. PR 당 평균 15 ~ 25 회 정도 코멘트를 주고 받으면서 코드를 사이에 두고 토론하는 경험이 신기했고 재밌었다. 이런 코드 리뷰 문화를 가진 회사에 입사하고 싶다는 생각도 하게되었다. 이전까지는 코드를 작성할 때 이게 정답이 아니면 어떡하지? 하는 막막함때문에 코드를 작성하는데 ..