자바의 제네릭(T) 심화
·
언어/java
타입 매개변수 제한저번에 이어 좀더 복잡한 예제를 다루어 보자동물 병원을 만든다.개병원은 개만 받을수 있고 고양이병원은 고양이만 받을 수 있다. 다형성을 활용해 문제 해결 시도public class AnimalHospitalV1 { private Animal animal; public void set(Animal animal) { this.animal = animal; } public void checkup() { System.out.println("동물 이름: " + animal.getName()); System.out.println("동물 크기: " + animal.getSize()); animal.sound(); } ..
자바의 제네릭(T) 기본
·
언어/java
제네릭이 필요한 이유대부분의 최신 프로그래밍 언어는 제네릭 개념을 제공한다나는 이 제네릭을 맨처음 혼자 했을때 정말 이해가 가지 않았다. 엄청 알쏭달쏭하고 햇갈리는 개념이라고 생각했다.그래서 제대로 잡고 갈 필요가 있다 코드1 - 시작우선 제네릭이 필요한 이유를 코드로 알아보자public class IntegerBox { private Integer value; public void set(Integer value) { this.value = value; } public Integer get() { return value; }}public class StringBox { private String value; public void set(St..
예외 처리 실습(Exception) 및 실무 예외 처리
·
언어/java
저번 포스팅에서 만든 단순한 프로그램을 다시 가져왔다. 한가지 문제가 있다고 했다정상흐름과 예외흐름이 섞여있어 정상 흐름이 한눈에 들어오지 않는다이 문제를 체크예외와 언체크 예외를 배운 우리는 한번 코드를 리펙토링 하면서 점진적으로 해결해 나가 볼것이다. 예외 처리 시작예외 처리 v1public class NetworkClientExceptionV2 extends Exception { private String errorCode; public NetworkClientExceptionV2(String errorCode, String message) { super(message); this.errorCode = errorCode; } public String g..
예외 처리 이론(Exception)
·
언어/java
예외 처리 시작예외처리가 필요한 이유를 알아보기 위해 간단한 예제 프로그램을 먼저 만들어 보자 public class MainV0 { public static void main(String[] args) { NetworkServiceV0 networkService = new NetworkServiceV0(); Scanner scanner = new Scanner(System.in); while (true) { System.out.print("전송할 문자: "); String input = scanner.nextLine(); if (input.equals("exit")) { br..
중첩클래스와 내부클래스
·
언어/java
중첩 클래스, 내부 클래스이름 그대로 생각해보자 중첩 클래스는 말그대로 클래스를 중첩해놓은거다class Outer { //중첩 클래스 class Inner { }}1. 중첩 클래스의 분류 2. 중첩 클래스 개요클래스 선언 위치정적 변수 위치 => 정적 중첩 클래스 생성가능인스턴스 변수 위치 => 내부 클래스 생성가능지역 변수 위치 => 지역 클래스 생성가능 중첩 클래스 종류정적 중첩 클래스내부 클래스지역 클래스익명 클래스정적중첩과 내부를 구별하는 방법은 중첩은 외부클래스에 내부클래스가 인스턴스에 소속되지 않는것이다.반면에 내부 클래스는 외부클래스에 내부클래스가 인스턴스에 소속이 된다 내부 클래스를 포함한 모든 중첩클래스는 특정 클래스가 다른 하나의 클래스 안에서만 사용되거나 둘이..
ENUM - 열거형
·
언어/java
열거형이 생긴 이유1. 문자열과 타입 안전성1자바가 제공하는 열거형을 제대로 이해하려면 먼저 열거형이 생겨난 이유를 알아야 한다.예제 하나를 보자 에제1비즈니스 요구사항고객을 3등급으로 나누고 상품 구매시 등급별로 할인을 적용한다BASIC -> 10%할인GOLD -> 20%할인DIAMOND -> 30%할인public class DiscountService { public int discount(String grade, int price){ int discountPercent = 0; if (grade.equals("BASIC")){ discountPercent = 10; } else if (grade.equals("GOLD")){ ..
String 클래스
·
언어/java
String 클래스의 기본1. char와 String자바에서 문자를 다루는 대표적인 타입은 char, String 2가지가 있다package lang.string;public class CharArrayMain { public static void main(String[] args) { char[] charrArr = new char[]{'h', 'e', 'l', 'l', 'o'}; System.out.println(charArr); String str = "hello"; System.ou.println("str = " + str); }}실행결과hellostr = hello기본형인 char는 문자 하나를 다룰때 쓴다String은 여러문자, ..
Docker 기본 문법
·
DevOps/Docker
이미지 다운로드[최신 버전 이미지를 다운로드]# docker pull 이미지명docker pull nginx # docker pull nginx:latest와 동일하게 작동 그런데 어디서 이미지를 받아온다는거지? 이미지를 다운로드 할 때 Dockerhub라는 곳에서 이미지를 받아온다Github는 사람들이 올려놓은 코드를 저장하고 clone, pull 받아올수있다마찬가지로 Dockerhub도 사람들이 올려놓은 이미지들이 저장되어있어 pull을 통해 다운받아 사용할수 있다 즉 Dockerhub는 이미지를 저장 및 다운받을수 있는 저장소이다. [특정 버전 이미지를 다운로드]# docker pull 이미지명:태그명docker pull nginx:stable-perl특정 버전을 나타내는 이름을 태그명이라고한다...
Docker 기본 개념
·
DevOps/Docker
Docker를 사용하는 이유여러가지 이유가 있겠지만 핵심 장점 딱 1가지를 뽑자면 이식성이다.이식성 : 특정 프로그램을 다른곳으로 쉽게 옮겨서 설치 및 실행 할 수 있는 특성 말이 너무 어렵다. 예시로 쉽게 이해해보자 1번문제공부는 친구 두명이 있다. 둘다 컴퓨터에 자바를 다운로드하고 인텔리제이로 공부를 할려고한다.그런데 친구A의 컴퓨터에는 잘 되는데 친구B의 컴퓨터에는 잘 안된다.똑같은 방식으로 했는데도 말이다. 여러가지 이유가 있다. 버전이 안맞거나 한명은 맥북, 다른 한명은 윈도우이거나 등 2번문제어떤 어플을 실행하기위에 수많은 다른 어플을 깔아야한다(방화벽 등)너무 귀찮다. 새 노트북을 사거나 다른 기기로 할때마다 다 설치해야한다 이러한 문제를 깔끔하게 해결해주는게 Docker다. Docker란 ..
사이드 이펙트와 불변객체
·
언어/java
공유 참조와 사이드 이펙트사이드 이펙트 정의사이드 이펙트는 프로그래밍에서 의도된 작업 외에 추가적인 부수 효과가 일어나는 현상을 뜻한다public class Address { private String value; public Address(String value) { this.value = value; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } @Override public String toString() { return "Address{" + ..