Backend/Java 9

JAVA 오버로딩, 오버라이딩을 통해 다형성 구현하기

다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것이다. 자바에서는 다형성을 위해 부모클래스 타입의 참조변수로 자식클래스 타입의 인스턴스를 참조할 수 있도록 한다. 오버로딩과 오버라이딩을 통해 다형성을 구현할 수 있다. 오버로딩과 오버라이딩의 비교 오버로딩과 오버라이딩은 그 단어의 유사함으로 인해 혼동하기 쉽다. 하지만 그 개념은 확실히 다르며, 그 차이점을 아는 것이 중요하다. 오버로딩(overloading)은 새로운 메서드를 정의하는 것이고, 오버라이딩(overriding)은 상속받은 기존의 메서드를 재정의하는 것이다. 오버로딩 오버라이딩 메서드명 동일 동일 매개변수 및 타입 다름 동일 리턴 타입 관계 없음 동일 다형성을 구현하는 방법 오버로딩 : 메서드명이 같지만 ..

Backend/Java 2024.03.20

자바 컬렉션 프레임워크(Java Collection Framework) 정리

자바 컬렉션 프레임워크(Java Collection Framework)배열을 보완하는 컬렉션(Collection)컬렉션(Collection)은 여러 요소들을 담을 수 있는 자료구조이다. 즉, 다수의 데이터 그룹이며 컨테이너(Container)라고도 부른다. 컬렉션은 배열과 비슷하지만, 크기가 고정된 배열을 보완하여 Re-sizable한 특성을 가진다. 자바 초창기에는 Vector, Stack, HashTable 등의 컬렉션 클래스만 제공했으나 자바 1.2 이후 표준적인 방식으로 컬렉션을 다루기 위한 컬렉션 프레임워크(Collection Framework)가 등장하였다. 모든 컬렉션 클래스명은 구현한 인터페이스명이 포함되어 있어서 바로 클래스의 특징을 바로 알기 쉽다. (예를 들어 HashMap 클래스는 ..

Backend/Java 2023.12.18

Oracle JDK와 Open JDK 차이점 (feat. Java 유료논쟁)

자바는 어디에서나 실행할 수 있도록 개발된 프로그래밍 언어이다. 최초 썬 마이크로시스템즈에서 출시된 이후, 2010년 오라클에서 자바를 인수하게 되었다. 몇 년 전 '자바가 유료화가 된다(!)'는 뜨거운 논쟁이 있었다. 결론부터 말하자면 자바 언어는 GPL 라이선스로 무료이다. 그렇다면 어떤 것이 유료화가 된다는 것일까? 바로 JDK이다. JDK 자바 언어로 애플리케이션을 개발하려면 JDK 설치는 필수적이다. JDK(Java Development Kit)는 컴파일러, 디버깅 등 자바 애플리케이션 개발에 필요한 툴이 포함되어 있으며, 자바 실행환경인 JRE와 가상머신인 JVM도 포함되어 있다. Java 프로그램을 실행하기 위해서는 아래의 핵심 기능이 필요하다. Java로 작성한 프로그램을 컴파일해 주는 J..

Backend/Java 2023.09.17

Java 8, 11, 17 버전별로 추가된 기능 알아보기

자바에서 가장 많이 사용되는 버전은 자바 8이다. 아직까지도 실무에서는 Java 8만 계속 사용하고 있지만, 2023년 9월 현재는 자바 21 버전까지 출시가 된 상태이다. 대표적인 Java LTS 버전은 자바 8, 11, 17가 있는데, 스프링부트 3 버전부터 자바 17 이상만 지원되면서 최근 자바 8에서 17 버전으로 전환되는 비율이 많아졌다. 각 버전별로 추가된 기능들과 예제를 살펴보면서 대략적인 특징을 살펴보자. Java 8 에서 추가된 기능 2014년 릴리즈 오라클이 Sun Microsystems 인수 후 출시한 첫 번째 LTS 버전의 자바 오라클사의 유료 버전인 Oracle JDK와 오픈소스 기반의 무료 버전인 Open JDK로 나뉨 (뜨거웠던 Java 유료 논쟁) new Date and Ti..

Backend/Java 2023.09.16

자바 헷갈리는 용어 정리(Java SE, JDK, JRE, JVM)

Java SE 자바는 크게 3가지의 에디션이 있다. Java SE (Java Standard Edition, J2SE) : 표준 에디션 Java EE (Java Enterprise Edition, J2EE) : 기업용 에디션 (=Jakarta EE) Java ME (Java Micro Edition, J2ME) : 임베디드용 에디션 위 에디션 중에서 사람들이 많이 사용하는 것은 Java SE이다. Java SE는 한마디로 자바의 표준안이자 명세서(spec)를 말하는데, 이 명세서에 따라서 Java가 만들어지게 된다. 예를 들어 Java SE 20은 버전 20에 대한 명세서를 말한다. Java SE는 JCP(Java Community Process)라는 조직을 통해서 만들어지는데, JCP 홈페이지에서 JS..

Backend/Java 2023.09.15

절차지향과 객체지향에 관한 고찰

누군가 내게 "자바의 특징이 무엇인가?" 라고 묻는다면 반사적으로 객체지향 언어라고 말할 것이다. 그만큼 '자바는 객체지향 언어'라는 인식이 강하게 박혔기 때문이다. 그러나 남에게 핵심을 간추려 설명할 만큼 제대로 알고 있지는 못했다. 스파게티코드님이 절차지향과 객체지향을 비교하여 깔끔하게 설명한 글을 토대로 포스팅 하였다. 설명이 꽤 길지만 읽을 만한 가치가 있는 글이라고 생각한다. 절차지향 이 말에 한 번쯤 의구심을 품어본 적이 없는가? 위 사진은 절차지향과 객체지향의 차이점을 설명하는 단순화된 사례이다. 이를 바탕으로 실제로 자판기 프로그램을 구현한다고 생각해보자.​ 먼저 절차지향 방식을 보면, 차근차근 순서대로 따라가는 전형적인 절차식 프로그램임에 틀림이 없다. 그렇다면 객체지향 방식을 살펴보자...

Backend/Java 2022.10.09

문자열은 불변한다(String is Immutable)

자바에서 문자열을 만들 때 아래처럼 2가지 방법을 이용할 수 있다. String str1 = "개발새발"; // ""을 이용하여 문자열 생성 (String literal) String str2 = new String("개발새발"); // new 연산자로 문자열 생성 (String Object) 위의 출력결과는 동일하며, 사람들은 흔히 첫번째 방법으로 많이 쓴다. 그런데 메모리에 저장되는 공간은 엄연히 다르다는 것을 알고 있는가? 첫번째 방식인 String literal으로 생성하면 문자열은 힙영역의 String Pool에 저장되어 문자열이 동일하면 저장소를 공유할 수 있다. 반면 두번째 방식인 new 연산자로 생성하면 문자열은 힙영역에 저장되어 문자열이 같더라도 저장소 공유가 불가능하다. 이 차이점을 기..

Backend/Java 2022.08.14

자바의 데이터 타입(Primitive type, Reference type)

타입(Data type)이란 해당 데이터가 메모리에 어떻게 저장되고, 프로그램에서 어떻게 처리되어야 하는지를 명시적으로 알려주는 것이다. 자바에서 타입은 크게 기본형 타입과 참조형 타입이 있다. 기본형 타입(Primitive type) 기본형 타입은 아래 표와 같이 총 8개의 타입들이 존재한다. 자바에서 미리 형식을 정의하여 제공하고 있으며, 기본값이 존재하기 때문에 Null 개념이 존재하지 않으므로 만약 기본형 타입에 Null을 넣고 싶다면 래퍼 클래스를 활용하면 된다. 기본형 타입은 실제 값을 저장하는 공간으로, 스택(Stack) 메모리에 저장된다. 주로 문법상의 에러(예를 들어 ;을 안붙였다든지)로 빨간 줄이 쳐지는 경우처럼 컴파일 시점에 담을 수 있는 크기를 벗어나면 에러를 발생시키는 컴파일 에러..

Backend/Java 2022.01.31

자바의 구동 원리와 JVM(Java Virtual Machine)

자바 프로그램의 구동 원리 소스코드를 작성한다. (.java 확장자의 소스 파일) 컴파일러(javac.exe)가 바이트코드로 변환한다. (.class 확장자의 클래스 파일) 런처(java.exe)로 자바 가상 머신을 구동시킨다. 자바 가상 머신이 바이트코드를 해석하여 자바 프로그램이 실행된다. 위 순서에서 바이트코드(bytecode)는 자바 가상 머신이 이해할 수 있는 언어로 변환된 코드다. 자바 가상 머신만 설치되어 있다면 바이트코드는 어떤 운영체제에서라도 실행될 수 있다. 자바 가상 머신(JVM) 일반 프로그램은 "운영체제"가 프로그램을 실행시킨다. 반면 자바 프로그램은 운영체제가 JVM을 실행시키면 "JVM"이 프로그램(클래스 파일)을 실행시킨다. 즉, 자바 프로그램의 클래스 파일들은 운영체제에서 ..

Backend/Java 2022.01.26