Java

    Java - 함수(function)와 메서드(method), 일급 객체

    함수 vs 메서드 자바에서 함수(function)는 일반적으로 정적 메서드(static method)와 같은 의미로 사용된다. 또 일반적으로 함수는 특정 클래스에 속하지 않고 전역적으로 호출될 수 있다. 하지만 메서드는 보통 특정 클래스에 선언되기에 종속적이다. 즉, 함수는 전역적으로 사용될 수 있는 독립적인 존재, 메서드는 클래스와 같은 구조체에 종속적인 존재다.아래의 코드를 통해 확인해보자.public class FirstClass { public static void callFunction() { System.out.println("함수"); }}public class SecondClass { public void callMethod() { System.out.println("메..

    Java - List의 제네릭 타입이 달라도 오버로딩은 불가하다.

    문제 상황 토이 프로젝트 진행 중 인자로 List의 제네릭 타입을 다르게 해서 메서드를 오버로딩하려고 했다. 아래와 같이 코드를 작성하면 이와 같은 컴파일 오류가 발생한다. 'calculatePeriodBy(List)' clashes with 'calculatePeriodBy(List)'; both methods have same erasure public int calculatePeriodBy(List functions) { int totalExpectedTime = functions.stream() .mapToInt(RequiredFunction::getExpectedTime) .sum(); return calculatePeriod(totalExpectedTime); } public int calcu..

    Java - List vs Map

    List vs Map 인프런 강의를 듣던 중 "List로 조회를 하면 성능이 저하될 수 있으니 Map으로 바꾸자"라는 말을 들었다. 사실 별다른 생각 없이 두 컬렉션을 사용해왔다. 키를 통해 값을 조회해야하는 상황에선 Map을 쓰고, 그 외의 상황에선 일반적으로 List를 사용해 왔다. 특정 상황에서 분명 유리한 컬렉션이 있다. 그렇기에 두 컬렉션의 구조적 차이와 성능 차이에 대해 알아보고자 한다. List vs Map(조회 시 성능 차이) 두 컬렉션에서 주로 사용되는 구현체인 ArrayList와 HashMap을 사용해 비교를 해보자 1. 저장 성능 차이 1-1. List - 순차 저장 // ArrayList - 순차 저장 saveListSequentially(1000); saveListSequentia..

    Java - 서블릿과 서블릿 컨테이너

    1. Servlet? 1.1 정의 웹페이지를 동적으로 생성하고 웹 서버의 성능을 향상하기 위해 사용하는 자바 프로그램이다. 쉽게 풀어 쓰자면 클라이언트의 요청을 처리하고 응답을 생성하는 자바의 클래스라고 할 수 있다. 즉, 요청과 응답에 대한 로직을 개별적으로 구현하기엔 너무 복잡하기에 개발자의 요청, 응답처리를 간편하게 도와준다. 1.2 특징 JSP와의 차이 - JSP는 HTML안에 자바 코드가, 서블릿은 자바 코드안에 HTML을 포함하는 차이가 있다. 스레드 사용 - 외부요청에 프로세스 대신 경량의 스레드로 응답하기 때문에 가볍다. 동적 웹 페이지 생성 - 클라이언트의 요청에 따라 서비스를 제공하고 응답 서블릿 컨테이너에 의존적 - 클라이언트의 요청을 서블릿 컨테이너가 받고 적절한 서블릿에게 전달 보..

    Java - 얕은 복사 vs 깊은 복사(shallow copy vs deep copy)

    1. 배경 코딩테스트 준비를 하며 배열의 복사때문에 애를 먹은적이 있고, 이전 프로젝트를 진행 할때도 관련 문제가 있어 헤맨적이있다. 지금이라도 확실하게 알아두고 가는게 맞다고 생각하기에 공부할겸 포스팅을 한다. 2. 개요 얕은복사 (shallow copy) - 주소값을 복사한다. (참조하는 값이 같기에 한쪽이 변경되면 같이 변경된다.) 깊은복사 (deep copy) - 실제값을 새로운 메모리 공간에 복사(stack영역) 3. 예시 package study; public class Copy { static class Information { int no; String nation; public Information(int no, String local) { this.no = no; this.nation ..

    String vs StringBuffer vs Stringbuilder

    1. 배경 문자열을 다루는 대표적인 3개의 클래스. 평소에 3개의 클래스들에 대한 차이를 헷갈려했는데 오늘 공부중에 관련내용이 나와 이참에 확실하게 차이점을 공부하려한다. 2. 주요 차이점 String StringBuffer/StringBuilder 클래스들의 가장 큰 차이는 변경가능여부이다. 한번 생성된 String인스턴스가 갖고 있는 문자열은 read only, 변경 불가능(immutable) 클래스이다. StringBuffer StringBuilder의 차이는 동기화 여부에 따른다. StringBuffer는 동기화를 지원해 멀티쓰레드에 안전하도록 되있기에 멀티쓰레드 환경이 아닌 경우 동기화는 불필요하게 성능을 낮춘다. 단일쓰레드에선 Builder클래스가 더 유리하다. 3. 예시 String클래스 위..