스터디 30

[자바 스터디] 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

[자바 스터디] 2주차 : 자바 데이터 타입, 변수 그리고 배열

프리미티브 타입과 레퍼런스 타입 프리미티브 타입 (Primitive Type) 실제 값 자체를 Stack에 저장 byte, short, int, long, char 등 레퍼런스 타입 (Reference Type) class, interface, enum, array, String 값에 대한 참조(주소값)을 Stack에 저장 실제 값은 Heap에 저장 Example Stack Heap int a = 10; char b = 'C'; MyClass myClass = 100번지; 100번지 = myClass 인스턴스 프리미티브 타입 종류, 범위, 기본 값 이름 크기 값 범위 기본 값 비고 byte 1 byte -128 ~ 127 0 short 2 bytes -32,768 ~ 32,767 0 signed int ..

스터디/자바 2023.01.22

[자바 스터디] 1주차 : JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.

JVM이란 무엇인가 JVM (Java Virtual Machine) Java로 작성된 프로그램은 .class 확장자로 컴파일됨 이렇게 변환된 .class 파일이 JVM 위에서 실행됨 즉, JVM은 프로그램을 실행하기 위한 물리적 머신과 유사한 머신을 소프트웨어로 구현한 것을 말함 WORA(Write Once Run Anywhere) JVM의 목적 중 하나 JVM 라는 가상 머신이 OS 위에서 동작하기 때문에 자바 코드가 동일하게 하나의 .class 파일로 컴파일되어도 모든 OS (위의 JVM)에서 실행할 수 있다. JVM 자체는 OS에 의존적이다. [출처 : Tecoble - JVM에 관하여 - Part 1] JRE (Java Runtime Environment) JRE는 자바 코드를 실행하기 위한 환경..

스터디/자바 2023.01.21