Java 67

Java - 추상 클래스와 인터페이스

추상 클래스와 인터페이스는 비슷한 개념이지만 차이점이 있는데 자세한 차이점을 알아보겠습니다. 1. 추상 클래스 먼저 추상 클래스는 일반 클래스와 별 차이가 없지만, 추상 메서드를 선언하여 상속을 통해 자손 클래스에서 완성하도록 유도하는 클래스라고 정의할 수 있겠습니다. 클래스를 설계도라고 하면 추상 클래스는 미완성 설계도로 표현할 수 있으며, 이는 상속을 위한 클래스로 따로 객체를 생성할 수 없다는 특징을 가집니다. abstract class ClassName { ... public abstract void Methodname(); } class 앞에 abstract 키워드를 붙여 상속을 통해 구현해야 한다는 것을 알려주고, 선언부만 작성하는 추상메서드를 선언할 수 있습니다. 2. 인터페이스 인터페이..

Skills/Java 2022.08.23

Java - ConcurrentHashMap

ConcurrentHashmap 설명에 앞서 HashMap이 무엇인지 리마인드를 한번 하고 넘어가겠습니다. 1. HashMap과 HashTable HashMap은 Java Collections Framework에 속한 구현체 클래스입니다. Collections Framework는 98년에 발표한 Java 2에서 정식으로 선보였으며, Java 5에서 Generic이 적용된 후 변화가 없지만 구현체 성능을 향상시키기 위해 변화해왔습니다. JDK 1.0부터 있던 API인 HashTable도 Map 인터페이스를 구현하고 있기 때문에 HashMap과 제공하는 기능은 같지만, HashMap은 보조 해시함수를 사용하기 때문에 HashTable에 비해 *해시 충돌(Hash Collision)이 덜 발생하여 성능 상의 ..

Skills/Java 2022.08.21

Java - Generic, 변성

Java에서 제네릭은 클래스나 메서드에서 사용할 내부 데이터 타입을 컴파일 시 미리 지정하는 것을 말합니다. 컴파일 타임에 타입을 체크함으로써 객테의 타입 안정성을 높일 수 있고, 반환 값에 대한 타입변환 및 검사에 들어가는 시간을 줄일 수 있다는 장점이 있습니다. 코드를 예시를 들어 살펴보겠습니다. List stringlist = new ArrayList(); stringList.add("it's not generic"); stringList.add(1); String result = (String) stringList.get(0) + (String) stringList.get(1); List stringList=new ArrayList(); stringList.add("it's generic"); s..

Skills/Java 2022.08.13

Java - 정적 바인딩, 동적 바인딩

Overloading, Overriding을 설명한 이전 글에서 정적 바인딩과 동적 바인딩이라는 개념이 나왔는데, 이해를 위해 글을 작성했습니다. 먼저 Binding이 무엇인지 정의한다면, 컴퓨터 프로그래밍에서 각종 값들이 확정되어 더 이상 변경할 수 없도록 구속(Bind)상태가 되는 것을 말합니다. 프로그램 내 변수, 배열, 절차 등의 명칭 즉 식별자가 그 대상인 메모리 주소, 데이터형 혹은 실제 값으로 배정되는 것이 이에 해당됩니다. 쉽게 말해서 개발자가 코딩하여 컴파일하게 되면, 값을 변경할 수 없는 상태가 되는데 이것을 바인딩이라고 합니다. (메모리에 값을 할당하는 것도 바인딩이라고 할 수 있습니다.) 이 바인딩의 종류는 정적 바인딩과 동적 바인딩으로 나뉘게 되는데 특징을 한번 살펴보도록 하..

Skills/Java 2022.08.06

Java- Overloading, Overriding

Java에는 Overloading, Overriding이라는 개념이 있습니다. 두 기능 모두 다형성을 높여주는 개념이고, 이름도 비슷하지만 실상 기능은 다른데 한번 살펴보겠습니다. 1. Overloding public class Test { public void show(String Name1, String Name2) { System.out.println("Name1: " + Name1); System.out.println("Name2: " + Name2); } public void show(String Name1) { System.out.println("Name1: " + Name1); } public static void main(String[] args) { MadPlay instance = ne..

Skills/Java 2022.08.05

Java - Wrapper Class

1. Wrapper Class Wrapper Class는 기본 자료형(Integer, Float, Boolean...)에 대한 클래스 표현을 말합니다. 이름처럼 무언가 감싸고 있다는 의미인데 기본 자료형을 감싸고 있음을 뜻합니다. 이 wrapper class의 사용 이유는 참조형 자료형을 사용하는 이유와 같습니다. 기본 자료형의 값을 단순 값으로 사용하지 않고, 그 값에 대한 메서드를 사용하거나 null값을 이용하기 위해 wrapper class를 사용합니다. 2. AutoBoxing JDK 1.5 부터는 AutoBoxiing,Unboxing을 제공하게 되는데 wrapper class에 상응하는 primitiva data type일 경우에 가능합니다. List list = new ArrayList(); ..

Skills/Java 2022.07.30

Java - Access Modifier

접근 제한자(Access Modifier)는 말 그대로 접근을 제한하는 것인데, 여기서 접근은 클래스, 인터페이스 그리고 이 둘이 가지고 있는 멤버들의 접근을 의미합니다. 프로그램 설계 시, 어떤 클래스와 인터페이스는 다른 패키지에서 사용을 못하도록 막는 경우도 있고, 객체의 생성을 막기 위해 생성자를 호출하지 못하게 하거나 필드나 메서드를 사용하지 못하도록 제한하는 경우가 있습니다. 이럴 때 접근 제한자를 사용해 막게됩니다. 종류를 통해 살펴보겠습니다. 1. public 첫 번째로 public 입니다. public을 직역하면 공공의, 일반(대중)의 라는 뜻을 가지는데 제한자 역할도 단어의 뜻과 같습니다. 1.1 클래스 접근 제한 public class name{} 클래스 선언 시, public으로 선언..

Skills/Java 2022.07.28

Spring - MockMvc를 이용한 HTTP 메시지 검증

1. MockMvc MockMvc는 웹 애플리케이션을 애플리케이션 서버에 배포하지 않고 Test용 MVC환경를 만들어 요청 및 전송 응답(HTTP request) 기능을 제공해주는 유틸리티 클래스입니다. 2. 사용 예 먼저 MockMVc 생성을 해주고, perform() 메서드를 이용해 요청 설정 메서드를 통해서 요청에 대한 설정을 할 수 있습니다. 이 때 요청에 대한 설정은 param, cookie, request * sessionAttr (객체설정), content(요청 본문 설정) 등 다양합니다. 2.1 .andExpect .andExpect() 메서드는 응답을 검증하는 메서드로 뒤에 패러미터에 따라 검증하는 값을 바꿀 수 있습니다. isOk() : 200, isNotFound() : 404 등....

Skills/Spring 2022.07.24

Spring - @RunWIth, @ExtendWith

1. Junit4 @RunWith Junit4에서는 @RunWith(클래스이름.class) 애노테이션으로 Junit Test 클래스를 실행하기 위한 Runner를 명시적으로 지정하여 Test code를 커스터마이징합니다. 여기서 Test Runner는 테스트 클래스 내에 존재하는 각 테스트 메서드 실행을 담당하고 있는 클래스입니다. 이는 테스트 클래스의 구조에 맞게 메서드를 실행하고 결과를 표시하는 역할을 수행합니다. 원래는 Juni4의 기본 테스트 러너는 BlockjUnit4ClassRunner이지만 대신에 @RunWith로 지정된 클래스를 이용해 클래스 내 테스트 메서드를 수행하도록 지정하여 사용합니다. 2. Junit5 그런데 Junit5부터는 @RunWith 애노테이션이 아닌 Extension이라..

Skills/Spring 2022.07.22

Java - final keyword

Java에서 클래스나 변수를 정의할 때, final 키워드를 사용합니다. final의 의미는 클래스나 변수에 final을 붙이면 시간이 지나도 정의된 상태가 변하지 않는다는 것을 보장합니다. 각각 어떻게 final을 선언하고 정의하는지 살펴보겠습니다! 1. Final class final class는 다른 클래스에서 상속하지(되지) 못하는 것을 의미합니다. final class Test1{ final String test; FT(){ test = "final class"; } } class Test2 extends Test1() {} // comfile error : Cannot assign a value to final variable '~' 클래스에 final을 붙이면 다른 클래스가 상속할 수 없는..

Skills/Java 2022.07.20