Java 33 [Java] Optional 공식 API 문서에서는 메서드가 반환할 결과값이 ‘없음’을 명백하게 표현할 필요가 있고, null을 반환하면 에러를 유발할 가능성이 높은 상황에서 메서드의 반환 타입으로 Optional을 사용하자는 것이 Optional을 만든 주된 목적입니다. Optional 타입의 변수의 값은 절대 null이어서는 안 되며, 항상 Optional 인스턴스를 가리켜야 한다고 말하고 있습니다. Optional 클래스는 Integer나 Double 클래스처럼 'T'타입의 객체를 포장해 주는 래퍼 클래스(Wrapper class)입니다. 따라서 Optional 인스턴스는 모든 타입의 참조 변수를 저장할 수 있습니다. 이러한 Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 제공되는 메서.. Language/Java 2021. 10. 29. [Algorithm] Vector Vector는 ArrayList와 동일한 내부구조를 가지고 있습니다. ArrayList와 마찬가지로 Vector 내부에 값이 추가되면 자동으로 크기가 조절되며 그다음 객체들은 한 자리씩 뒤로 이동됩니다. 하지만 Vector와 Arraylist의 한가지 다른 점이 있는데 Vector는 동기화된 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 이 메소드들을 실행할 수 없고, 하나의 스레드가 실행을 완료해야만 다른 스레드들이 실행할 수 있습니다. 그래서 멀티 스레드 환경에서 안전하게 객체를 추가하고 삭제할 수 있습니다. 단점 벡터는 항상 동기화되는 장점이자 단점을 가지고 있습니다. 스레드가 1개일때도 동기화를 하기 때문에 ArrayList보다 성능이 떨어집니다. Arraylist는 기본적인 기능은 벡터와 .. Algorithm 2021. 10. 6. [Java] 객체 지향 언어 객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 프로그래밍의 패러다임 중 하나로 객체의 관점으로 프로그램을 설계하는 방법입니다. 작은 문제들을 해결할 수 있는 객체들을 만든 뒤, 이 객체들을 조합해서 큰 문제를 해결하는 상향식(Bottom-Up) 해결법을 도입했습니다. 이 객체란 것을 일단 한번 독립성/신뢰성이 높게 만들어 놓기만 하면 그 이후에 그 객체를 수정 없이 재사용할 수 있으므로 개발 기간과 비용이 대폭 줄어들게 됩니다. 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소포트웨어 개발에 많이 사용됩니다. 또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 직관적인 코드 분석을 가능하게 하는 장점을 갖.. Language/Java 2021. 9. 29. [Spring] JdbcTemplate 스프링은 JDBC를 이용하는 DAO에서 사용할 수 있도록 준비된 다양한 템플릿과 콜백을 제공합니다. 거의 모든 종류의 JDBC코드에 사용 가능한 템플릿과 콜백을 제공할 뿐만 아니라, 자주 사용되는 패턴을 가진 콜백은 다시 템플릿에 결합시켜서 간단한 메소드(update(), query(), queryForObject()) 호출만으로 사용이 가능하도록 만들어져 있기 때문에 템플릿/콜백 방식의 기술을 사용하고 있는지도 모르고도 쓸 수 있을 정도로 편리합니다. 스프링이 제공하는 JDBC 코드용 기본 템플릿이 바로 JdbcTemplate입니다. update() update는 다양한 형태를 제공하지만 기본적으로 SQL 구문과 '?' 치환자를 대체할 수 있는 가변인자들을 파라미터로 받아 사용하는 메서드입니다. //예.. Domain/Spring 2021. 8. 9. [Spring] Bean ( Spring Bean ) Bean Spring에서는 Container를 이용해 객체들을 관리합니다. 이때 Container가 관리하는 자바 객체를 Bean이라고 부릅니다. 흔히 알고 있는 new를 통해 생성된 객체는 Bean이라고 할 수 없습니다. Bean은 getBean()을 통해 얻어질 수 있는 것을 Bean이라고 합니다. Spring에서의 빈은 ApplicationContext가 알고있는 객체, 즉 ApplicationContext가 만들어서 그 안에 담고있는 객체를 의미합니다. Spring에서 Bean을 등록하는 방법은 ComponentScan 방법과, Configuration에서 직접 등록하는 방법이 존재합니다. 스프링은 기본적으로 모든 Bean을 Singleton으로 생성하여 관리합니다. Bean은 다양한 Scope를.. Domain/Spring 2021. 7. 23. [Spring] 스프링이란? (Spring / Spring Boot / Spring Framework ) 스프링에 대해 가장 잘 알려진 정의는 '자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크'입니다. 애플리케이션 프레임워크는 특정 계층이나, 기술, 업무 분야에 국한되지 않고 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크를 말합니다. 애플리케이션 프레임워크는 애플리케이션 개발의 전 과정을 빠르고 편리하며 효율적으로 진행하는 데 일차적인 목표를 두는 프레임워크입니다. 엔터프라이즈 개발을 편하게 하려는 이유는 원래 엔터프라이즈 개발이란 편하지 않기 때문입니다. 자바 엔터프라이즈 시스템 개발이 어려운(편하지 않은) 가장 큰 이유는 근본적인 비즈니스 로직과 엔터프라이즈 기술이라는 두 가지 복잡함이 얽혀 있기 때문입니다. 침투적 vs 비침투적 침투적인(invasive) 기술 : .. Domain/Spring 2021. 7. 13. [Java] 제네릭 (Generic) 프로그램에서 변수를 선언할 때 모든 변수는 자료형이 있습니다. 메서드에서 매개변수를 사용할 때도 자료형을 가지고 있습니다. 대부분은 하나의 자료형으로 구현하지만, 변수나 메서드의 자료형을 필요에 따라 여러 자료형으로 바꿀 수 있다면 프로그램이 훨씬 유연할 것입니다. 이러한 하나의 참조가 아닌 여러 참조 자료형을 사용할 수 있도록하는 것이 제네릭입니다. 제네릭을 사용하는 이점 제네릭은 컴파일 타임에 유효성을 검사하기 때문에 안정성이 높습니다. 런타임이 아닌 컴파일 타임에 체크하기 때문에 프로그램 동작에 영향을 주지 않습니다. 타입변환에 관한 코드를 제거할 수 있습니다. Generic 대신 Object로 코드를 작성하게 된다면, 형 변환에 대한 비용이 발생하게 됩니다. 제네릭 클래스를 사용하면 컴파일러는 일.. Language/Java 2021. 4. 21. 정적 타입 지정 vs 동적 타입 지정 정적 타입 지정 언어 정적 타입 지정 언어는 C, C#, C++, Java, Kotlin 등의 언어가 있습니다. 정적 타입 지정 언어는 변수에 들어갈 값에 따라 미리 자료형을 지정해주어야 합니다. 정적 타입 지정 언어는 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 필드나 메소드를 사용할 때마다 컴파일러가 타입을 검증해줍니다. 런타임에서 어떤 메소드를 호출할 지 알아내는 과정이 생략되어 메소드 호출이 더 빠릅니다. 컴파일러가 프로그램의 정확성을 검증하기 때문에 실행 시 프로그램이 오류로 중단될 가능성이 낮아집니다. 코드에서 다루는 객체가 어떤 타입에 속하는지 알 수 있기 때문에 파악하기가 쉽습니다. 동적 타입 지정 언어 동적 타입 지정 언어는 JavaScript, Groov.. Computer Science/Programming 2021. 3. 29. [Java] 다형성 다형성이란 하나의 메소드나 클래스가 있을 때 이것들이 다양한 방법으로 동작하는 것을 의미합니다. 예를 들어 키보드라는 클래스에 누른다라는 동작이 있습니다. 그렇다면 ENTER를 누르는 것과 ESC, SPACE를 누르는 것은 서로 다른 동작을 하게 됩니다. 이러한 동작을 다형성이라고 합니다. 다형성에 대해 가장 많이 언급되는 것이 상속과 Overriding, OverLoading입니다. OverLoading에 대해서는 의견이 분분하다고 많은 책들에서 언급되지만 예시에 포함하도록 하겠습니다. Overloading 같은 이름을 가지지만 매개변수의 개수 또는 타입에 따라 서로 다른 동작 방법을 하는 것을 오버로딩이라고 합니다. public class Printer { public void print(int nu.. Language/Java 2021. 1. 1. [Java] 실행 데이터 영역 (Runtime Data Area) 자바 실행 데이터 영역 (Runtime Data Area) Runtime Data Area는 JVM 이 프로그램을 수행하기 위해 할당 받는 메모리 영역이라고 할 수 있습니다. 실제 성능 문제에 직면했을 때, 대부분의 문제점은 Runtime Data Area에서 발생 하는 경우가 많습니다. Memory Leak 이나 Garbage Collection 인 경우를 그 예로 볼 수 있습니다 . 이러한 문제가 발생할 때, 이 문제가 왜 발생한 것인지 어디에서 발생한 것인지 확인하는 것은 쉽지 않습니다. 이 경우 Runtime Data Area 아키텍처를 이해한다면 해당 문제를 분석하는데 도움이 될 것입니다. Runtime Data Area는 크게 다섯 가지 영역으로 나뉘게 됩니다 . 그것은 PC Register,.. Language/Java 2020. 12. 27. 이전 1 2 3 4 다음