Language/Java

·Language/Java
람다가 등장한 배경람다 표현식이 등장한 배경은 자바 8의 주요 개선 사항 중 하나이다. 이전 자바에서는 코드를 간결하게 표현하기 위해선 익명 클래스를 활용하였다. 익명클래스는 인터페이스나 추상 클래스의 구현을 정의하는 데에는 유용했지만, 코드가 복잡해지고 가독성이 떨어지는 문제가 발생되었다. 자바 8에서는 이러한 문제를 해결하기 위해 람다 표현식을 도입하였다. 람다 표현식은 익명 함수를 정의하는 간결한 방법으로, 함수형 프로그래밍 스타일을 지원하고 코드를 더 간결하게 만들어준다. 람다 표현식은 자바 컬렉션과 스트림 API와 밀접하게 관련되어 있으며, 컬렉션을 데이터를 저장하고 조작하는 데 사용되는 자바의 핵심 요소 중 하나이다. 자바 8에서는 이 컬렉션을 효과적으로 다루기 위해 스트림 API 도입하였고,..
·Language/Java
어노테이션의 역할스프링 같은 프레임워크를 사용하면 아무래도 어노테이션의 역할은 더 광범히 해진다. 그럼 일단 Java 코드로 돌아와 어노테이션의 역할을 먼저 확인해 보자.우선, 어노테이션은 기본적으로 아래 세 가지 기능을 제공한다.컴파일러에서 코드 작성 문법 에러를 체크빌드도구에서의 사용 (코드 생성)실행 시(런타임 시) 특정 기능을 실행이것에 대한 예시로 @Override 어노테이션을 확인해 보자.  @Override 어노테이션은 직관적으로 자바의 오버라이딩을 표현해 주는 것을 알 수가 있다. 자바에 대한 오버라이딩을 배우면 알 수 있듯이 저 어노테이션이 없다고 하더라도 해당 기능을 쓰는 데는 문제가 발생하지 않는다. class Parent { public void hello(String name..
·Language/Java
객체지향을 공부하다 보면 나오는 개념 중 하나가 다형성이다. 그 다형성을 설명하기 위해 나오는 키워드가 Overriding과 Overloading이다. 물론 다형성은 상위 클래스와 하위 클래스 사이에서도 이야기할 수 있고, 인터페이스와 구현 클래스 사이에서도 이야기할 수 있지만 가장 기본은 오버라이딩과 오버로딩이다. 관점에 따라 오버로딩은 다형성인지에 대해서는 이견이 존재한다. 하지만 객체지향엔 정답이 없으니 상관없다. 해당 키워드들을 비교하는 것은 자바 객체지향에 있어 클래식한 질문 중 하나이다. 왜냐하면 두 용어는 이름은 비슷하지만 전혀 다른 의미로 사용되기 때문이다. 오버라이딩과 오버로딩? - 같은 메서드 이름, 같은 인자 목록으로 상위 클래스의 메서드를 재정의 - 같은 메서드 이름, 다른 인자 목..
·Language/Java
코딩테스트를 풀다 보면 유용하게 써야 되는 방법 중 하나이다. 자바에서 'String[]' 배열과 'LIst' 사이 변환은 매우 간단하나 까먹을 때가 있어 문서화시켜 정리하자. String[] 배열을 List으로 변환하기 Array 유틸리티 클래스의 'asList'메서드를 사용하여 배열을 리스트로 변환할 수 있다. import java.util.Arrays; import java.util.List; public class ArrayToListExample { public static void main(String[] args) { String[] stringArray = {"a", "b", "c"}; List stringList = Arrays.asList(stringArray); System.out.p..
·Language/Java
이 코드에서 @Override가 있으면 문제가 없을까? class Parent { public void hello(String name) { System.out.println("안녕하세요, 저는 " + name + "입니다."); } } class Child extends Parent{ // @Override가 있고 없고 차이가 없을까? public void hello() { System.out.println("안녕!"); } } 위 코드는 @Override 어노테이션을 사용하지 않으면 동작이 되고, 사용하면 예외가 발생한다. 예외가 발생한다는 것은 오버라이딩이 아니라는 의미이다. 오버라이딩의 조건은 다음과 같다. 부모 클래스의 메서드와 메서드 이름이 동일해야 한다. 매개변수의 타입, 개수, 순서가 일치..
·Language/Java
일전에 컴파일을 정리하며 "Java는 컴파일 기반 언어 중 하나다."라고 정리하였는데 최근 강의에서 Java는 컴파일러와 인터프리터를 모두 수행하는 '하이브리드 언어'이다.라는 말을 듣게 되어 정리를 해보았다. 그럼 우선 Java에 대해 알아보기 전에 인터프리터와 컴파일러를 간단히 알아보자. 컴파일러(compiler) 고급언어는 실행하기 전 기계가 이해할 수 있는 기계어로 번역하는 작업이 필요하다. 이것을 컴파일이라고 한다. 이런 컴파일을 해주는 도구 또는 논리적인 장치를 '컴파일러'라고 한다. 컴파일러는 프로그램 전체를 스캔하여 이를 모두 기계어로 번역한다. 전체를 스캔하기 때문에 초기 스캔 시간을 오래 걸린다. 하지만 전체 실행 시간 기준을 두고 비교해 보면 오히려 인터프리터보다 빠르다. 왜냐하면 컴..
·Language/Java
객체지향의 4대 특징을 정리하면서 추상화를 설명할 때 인터페이스를 예로 들어 설명을 했다. 공통적인 속성과 기능을 정의하기 위해 인터페이스를 사용한다라고 설명했다. 그럼 내가 알고 있는 인터페이스와의 개념과 사용용도를 생각해 보자. 인터페이스는 기술명세서 또는 다양한 구현체가 존재할 수 환경에서의 기초가 되는 틀정도 개념으로 사용하였다. 예를 들어 설명하자면 스프링 프로젝트에서 비즈니스 로직을 구현하는 Service단에서 기능 구현 전 인터페이스를 생성하여 기능의 명세만 먼저 작성하는 행위, DB가 정해지기 전 작업을 진행하기 위해 기준 Repository를 인터페이스 선언하여 구현하는 행위 등의 용도로 사용하였다. 이제 인터페이스의 특징과 기능을 정리해 보고 그것이 객체지향 관점에서 어떤 역할을 하는지..
·Language/Java
객체지향은 4가지 특징을 가지고 있다. 이 4가지 특징에 대해서는 자주 들어 알고 있지만 올바르게 개념을 가지고 있는지는 확인할 필요가 있어 정리를 해보았다. 객체지향의 4가지 특징 캡슐화 상속 추상화 다형성 캡슐화 캡슐화란 변수나 메서드들을 캡슐로 감싸서 안 보이게 하는 정보 은닉 개념 중 하나이다. 객체의 개념에서 볼 때는 객체의 속성(Field)과 행위(Method)를 하나로 묶고, 실제 구현 내용의 일부를 외부에 감추어 은닉하여 외부에서 객체 내부에 어떤 속성이 있는지 완벽하게 알지 못해야 하는 것을 의미한다. 캡슐화는 객체의 속성과 행위를 하나로 묶음으로써 높은 응집도를 가지며, 객체의 내부 상태를 직접적으로 접근하지 못하게 막음으로써 결합도를 낮아지게 한다. public class Person..
JH_DEV77
'Language/Java' 카테고리의 글 목록