Stay Hungry Stay Foolish

자바 17

[자바 중급] 11. Generic 1

Generic자바에서 제네릭(generics)은 클래스, 메소드, 인터페이스를 선언할 때 데이터 타입을 파라미터로 받을 수 있게 해주는 기능이다. 제네릭을 사용하면 코드의 재사용성과 안정성을 높일 수 있다. 주요 특징은 다음과 같다.컴파일 타임 타입 체크제네릭은 컴파일 시점에 타입을 체크하여, 잘못된 타입이 사용되는 것을 방지한다. 예를 들어 List으로 선언하면 이 리스트에는 오직 String 타입만 담을 수 있다.타입 안정성제네릭을 사용하면 캐스팅(casting)을 피할 수 있어 타입 안정성을 높일 수 있다. 예를 들어, 제네릭을 사용하지 않는 List에서 객체를 꺼낼 때는 (String)처럼 캐스팅해야 하지만, 제네릭을 사용하면 그런 과정이 필요 없다.코드 재사용성여러 타입에서 사용할 수 있는 코드..

[자바 중급] 10. 예외 처리 2

코드를 통해 오류 발생 시뮬레이션과, 예외 처리 흐름을 알아보자.  사용자의 입력을 통해 오류를 발생시킨 후, 예외를 따로 처리하지 않고 밖으로 던진다.  오류 발생 시뮬레이션 1️⃣ 1. 어떤 종류의 오류가 발생했는지 담는 클래스public class NetworkClientExceptionV2 extends Exception { private String errorCode; public NetworkClientExceptionV2(String errorCode, String message) { super(message); //어떤 오류가 발생했는지 담는다. this.errorCode = errorCode; } //에러 코드를 조회할 수 있게 추가 p..

[자바 중급] 09. 예외 처리 1

예외 처리가 필요한 이유외부 서버와 통신할 때 다음과 같은 다양한 문제들이 발생할 수 있다.네트워크 오류 등으로 인해 외부 서버와 연결에 실패데이터 전송에 문제가 발생 자바의 예외 처리 메커니즘 제공자바는 프로그램 실행 중에 발생할 수 있는 예상치 못한 상황, 즉 예외(Exception)를 처리하기 위한 메커니즘을 제공한다. 이는 프로그램의 안정성과 신뢰성을 높이는 데 중요한 역할을 한다.  자바의 예외 처리는 다음 키워드를 사용한다. 그리고 예외를 다루기 위한 예외 처리용 객체들을 제공한다. trycatchfinallythrowthrows 예외 계층 구조  Exception : 체크 예외애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외이다.Exception과 그 하위 예외는 모두 컴파일러가 체..

[자바 중급] 08. 중첩 클래스, 내부 클래스 2

지역 클래스(Local class)지역 클래스는 내부 클래스의 종류 중 하나로 내부 클래스의 특징을 그대로 가진다. 따라서 지역 클래스도 바깥 클래스의 인스턴스 멤버에 접근할 수 있다.class Outer { public void process() { //지역 변수 int localVar = 0; //지역 클래스 class Local {...} Local local = new Local(); }}  특징지역 클래스는 지역 변수처럼 코드 블럭 안에 클래스를 선언한다.지역 클래스는 지역 변수에 접근할 수 있다.자신의 인스턴스 변수에 접근할 수 있다.자신이 속한 코드 블럭의 지역 변수 혹은 매..

[자바 중급] 07. 중첩 클래스, 내부 클래스 1

중첩 클래스, 내부 클래스클래스 안에 클래스를 중첩해서 정의할 수 있는데, 이것을 중첩 클래스(Nested Class)라 한다.class Outer { ... //중첩 클래스 class Nested { ... }}  중첩 클래스 종류중첩 클래스는 총 4가지가 있고, 크게 2가지로 분류할 수 있다. 중첩 클래스의 의미는 정적과 내부 클래스를 모두 포함한 것을 말하며, 정적 중첩 클래스는 말 그대로 정적 중첩 클래스를 의미한다. 내부 클래스는 내부, 지역, 익명 클래스를 포함한 것을 말한다.정적 중첩 클래스 내부 클래스 종류내부 클래스 : 바깥 클래스의 인스턴스의 멤버에 접근지역 클래스 : 내부 클래스의 특징 + 지역 변수에 접근익명 클래스 : 지역 클래스의 특징 + 클..

[자바 중급] 06. 날짜와 시간

날짜와 시간 라이브러리아래의 표는 oracle에서 제공하는 문서로 날짜와 시간 라이브러리이다.  LocalDate, LocalTime, LocalDateTime앞에 Local (현지의, 특정 지역의)이 붙는 이유는 세계 시간대를 고려하지 않아서 타임존이 적용되지 않기 때문이다.  특정 지역의 날짜와 시간만 고려할 때 사용한다.LocalDate : 날짜만 표현할 때 사용한다. 년, 월, 일을 다룬다. 예) 2013-11-21 LocalTime : 시간만을 표현할 때 사용한다. 시, 분, 초를 다룬다. 예) 08:20:30.213초는 밀리초, 나노초 단위도 포함할 수 있다. LocalDateTime : LocalDate 와 LocalTime 을 합한 개념이다. 예) 2013-11-21T08:20:30.213..

[자바 중급] 05. 열거형 Enum

타입 안전 열거형 패턴 - Enumenum은 enumeration의 줄임말로 변역하면 열거라는 뜻이고, 어떤 항목을 나열하는 것을 뜻한다. 타입 안전 열거형 패턴을 사용하면 나열한 항목만 사용할 수 있다. public class ClassGrade { public static final ClassGrade BASIC = new ClassGrade(); public static final ClassGrade GOLD = new ClassGrade(); public static final ClassGrade DIAMOND = new ClassGrade();} 위 코드는 타입 안전 열거형 패턴을 직접 구현한 것이다. BASIC, GOLD, DIAMOND라는 상수를 선언했다. static을 사용해서 상수를..

[자바 중급] 04. Wrapper class

기본형의 한계자바는 객체 지향 언어인데 int나 double같은 기본형은 객체가 아니기 때문에 다음과 같은 한계가 있다.객체가 아님 : 기본형 데이터는 객체가 아니기 때문에, 객체 지향 프로그래밍의 장점을 살릴 수 없다. 또한 기본형은 객체가 아니므로 메서드도 제공할 수 없다.null 값을 가질 수 없음 : 기본형 데이터 타입은 null값을 가질 수 없다.기본형의 한계를 해결하기 위해 도입된 것이 래퍼 클래스이다.  Wrapper class(래퍼 클래스)특정 기본형을 객체로 감싸서(Wrap) 만든 클래스를 래퍼 클래스라고 한다. 래퍼 클래스를 직접 만들 수도 있지만, 자바가 기본으로 제공해준다. 다음은 int 래퍼 클래스를 직접 만든 클래스이다.  직접 만든 래퍼 클래스public class MyInte..

[자바 중급] 03. String 클래스

String 클래스자바에는 문자열을 다룰 수 있는 String 클래스를 제공한다. String 클래스를 통해 문자열을 생성하는 방법은 2가지가 있다.쌍따옴표를 사용 : " "객체를 생성 : new String(" ")int, char같은 기본형은 소문자로 시작하지만 String은 대문자로 시작하는데 이는 참조형을 뜻한다. 참조형이라는 건 다른 말로 변수 하나에 String 인스턴의 참조값만 들어갈 수 있다는 말이다. 따라서 String 클래스를 사용할 때 객체를 생성해야 하지만 자바는 성능 최적화를 위해 문자열 풀을 사용하여 쌍따옴표(" ")만을 사용할 수 있게 했다. 기능(메서드) String 클래스에는 속성과 기능을 가진다. 따라서 문자열로 처리할 수 있는 다양한 기능을 제공한다. 주요 메서드는 다음..

[자바 중급] 02. 불변 객체

기본형과 참조형의 공유자바의 데이터 타입은 크게 기본형(Primitive Type)과 참조형(Reference Type)으로 나눌 수 있다.기본형 : 하나의 값을 여러 변수에서 절대로 공유하지 않는다.참조형 : 하나의 객체를 참조값을 통해 여러 변수에서 공유할 수 있다. 공유 참조와 사이드 이펙트사이드 이펙트(Side Effect)는 프로그래밍에서 어떤 계산이 주된 작업 외에 추가적인 부수 효과를 일으키는 것을 말한다.사이드 이펙트는 프로그래밍에서는 부정적인 의미로 사용된다. 프로그램의 특정 부분에서 발생한 변경이 의도치 않게 다른 부분에 영향을 미치기 때문에 디버깅이 어려워지고 코드의 안정성이 저하될 수 있다. 사이드 이펙트가 발생한 경우의 예제package lang.immutable.address;p..

[자바 중급] 01. Object 클래스

Object 클래스자바에서 모든 클래스의 최상위 부모 클래스는 항상 Object 클래스이다. 부모를 상속받으려면 'extends'를 명시적으로 붙여 상속을 받아야 한다. 그러나 Object 클래스는 'extends'를 붙이지 않아도 상속된다. 즉 부모가 없으면 묵시적으로 Object 클래스를 상속받는다.  Object 클래스가 최상위 부모 클래스인 이유는 다음과 같다. 공통 기능 제공객체의 정보를 제공하는 toString()객체의 같음을 비교하는 equals()객체의 클래스 정보를 제공하는 getClass()기타 여러가지 기능다형성의 기본 구현 Object 다형성의 장점어떤 객체든지 인자로 전달할 수 있다는 장점이 있다. 한계Object는 모든 객체를 대상으로 다형적 참조를 할 수 있다. Object를 ..

[자바 기초] 06. 스캐너(Scanner)

Scanner System.out 을 통해서 출력을 했듯이, System.in 을 통해서 사용자의 입력을 받을 수 있다. 그런데 자바가 제공하는 System.in 을 통해서 사용자 입력을 받으려면 여러 과정을 거쳐야해서 복잡하고 어렵다. 자바는 이런 문제를 해결하기 위해 Scanner 라는 클래스를 제공한다. 이 클래스를 사용하면 사용자 입력을 매우 편리하게 받을 수 있다. 형식 import java.util.Scanner; Scanner를 쓰기 위해선 java.util 패키지를 import 해주어야 한다. Scanner scanner = new Scanner(System.in); 그 다음, main 내에 Scanner의 객체를 만든다. Scanner는 System.in을 사용해서 사용자의 입력을 편리하..

자바 2024.03.26

[자바 기초] 05. 스코프(Scope), 형변환(Casting)

변수는 선언한 위치에 따라 지역 변수, 멤버 변수(클래스 변수, 인스턴스 변수)와 같이 분류된다. 앞 게시글에서 사용했던 변수들은 모두 Local Variable(로컬 변수), 한글로 지역 변수라고 한다. 지역 변수는 이름 그대로 특정 지역에서만 사용할 수 있는 변수라는 뜻이다. 그 특정 지역을 벗어나면 사용할 수 없다. 여기서 말하는 지역이 바로 변수가 선언된 코드 블록( {} )이다. 지역 변수는 자신이 선언된 코드 블록( {} ) 안에서만 생존하고, 자신이 선언된 코드 블록을 벗어나면 제거된다. 따라서 이후에는 접근할 수 없다. 🔘 Scope란? 변수의 접근 가능한 범위를 스코프(Scope, 범위)라고 한다. 접근 범위에 따라서 스코프가 넓다 혹은 좁다라고 표현할 수 있다. Scope1(while문..

[자바 기초] 04. 반복문(while/do-while/break/continue/for)

반복문 while문 do-while문 break continue for문 중첩 반복문 🔘 while문 while문은 조건에 따라 코드를 반복해서 실행할 때 사용한다. 형식 while (조건식) { // 코드 } 조건식이 참이면 코드 블럭을 실행하고, 이후에 코드 블럭이 끝나면 다시 조건식 검사로 돌아가서 조건식을 검사한다. 조건식이 거짓이면 while문을 벗어난다. (거짓일 때까지 무한반복) 예제 - while문을 사용하여 1을 한 번씩 더해서 총 3번 더하는 프로그램을 작성한다. While1_2 package loop; public class While1_2 { public static void main(String[] args) { int count = 0; while (count < 3) { cou..

[자바 기초] 03. 조건문(if/else if/switch/삼항 연산)

조건문 if문 switch문 🔘 if문 if 문은 특정 조건이 참인지 확인하고, 그 조건이 참( true )일 경우 특정 코드 블록을 실행한다. 형식 if (condition) { // 조건이 참일 때 실행되는 코드 } 예제 - 나이가 18세 이상일 경우 "성인입니다." 라는 문구를 출력하고, 18세 미만일 경우 "미성년자입니다."라는 문구를 if문을 사용해서 출력하라. 변수는 age라고 하고 초기값은 20으로 한다. If1 package cond; public class If1 { public static void main(String[] args) { int age = 20; if(age >= 18){ System.out.println("성인입니다."); } if(age = 18) - 참 두 번째 i..