공변성과 반공변성과 Generics
·
☕️ Java
들어가며최근 제가 다른 실수(타입 추정이 잘 안되는 문제)를 계기로 제네릭에 대해 다시 공부할 일이 생겼습니다.그러며 새로이 깨달은 것이 `공변성(covariance)` 과 반공변성(Contravariance)`에 대해 제대로 이해하고 있지 않기도 하고.매번 헷갈린다는 생각이 들어서 이번 기회로 조금 정리해보려고 합니다. 이미 Java로 코드를 구현할 때, 이 개념을 자연스럽게 사용하고 있었는데요.새삼 개념과 객체지향 리스코프 치환 원칙 LSP까지 짚어보니 좀 복잡했지만 왜 이렇게 사용해야했는지 이해할 수 있어서 유의미했던 공부였습니다. 공변성과 반공변성먼저 변성(variance)은 타입 시스템에서 서로 다른 타입 간의 관계를 설명하는 개념입니다. 다시말해 상속관계에 있는 A, B 타입이 있을 때, 이를..
람다식 Lambda Expression : 자바에서의 활용을 중심으로
·
☕️ Java
람다식 Lambda Expression 함수(메서드)를 간단한 ‘식’으로 표현하는 방법이다. (a, b) -> a>b ? a: b 익명 함수 anonymous function 함수와 메서드의 차이점 근본적으로 동일하지만, 함수 : 일반적인 용어. 클래스에 독립적 메소드 : 객체지향개념의 용어이다. 클래스에 종속적이다. 람다식 사용법 호출해서 사용하는 방식이 아닌, 구현부에서 바로 함수처리를 하여 내부에서 직접 기능을 처리하는 방식 반환 타임과 이름을 지운다. ()와 {} 사이에 화살표로 연결한다. 반환값이 있는 경우 식이나 값만 적고 return, ; 생략 가능 매개변수의 타입이 추론 가능하면 대부분 생략 가능하다. // 작성실습 int max(int a, int b) { return a>b? a:b; ..
Garbage Collection(가비지 컬렉션)
·
☕️ Java
Garbage Collection (GC) 이란? 프로그램을 개발하다보면 유효하지 않은 메모리, 가비지가 발생한다. 프로그램이 동적으로 할당한 메모리 영역 중 사용하지 않은 영역을 탐지하여 해지하는 기능이다. 여기서 동적으로 할당한 메모리 영역이란, JVM에서 Heap을 말한다. 사용하지 않은 영역이란 어떤 변수도 가리키지 않아 사용하지 않은 메모리를 말한다. GC가 언어와 동작하는 환경마다 다르지만, 특정 때에 특정 방식으로 필요없는 정보들을 삭제한다. 해제하는 것을 잊은 경우 메모리를 재사용할 수 없는데, (메모리를 차지하지만 사용되지는 않는다.) 이러한 것을 메모리 누수memory leak라고 한다. Managed Language ↔ Unmanaged Language C, C++ 등 Unmanage..
Java의 데이터 타입 분류와 메모리 할당
·
☕️ Java
데이터 타입의 분류 프로그램은 자료구조(데이터)와 알고리즘의 결합으로 이루어진다. Java의 데이터 타입에는 크게 기본타입(primitive type)과 참조타입(reference type)으로 분류된다. 기본 타입 기본 타입 메모리 사용 크기 저장되는 값 범위 byte 1byte -2^7 ~ (2^7 - 1) char 2byte 0 ~ (2^16 - 1), 유니코드 short 2byte -2^15 ~ (2^15 - 1) int 4byte -2^31 ~ (2^31 - 1) long 8byte -2^63 ~ (2^63 - 1) float 4byte (+/-)1,4E-45 ~ (+/-)3.4028235E38 double 8byte (+/-)4.9E-324 ~ (+/-)1.7976931348623157E308..
Java 실행 과정
·
☕️ Java
Java는 무엇일까? 자바는 객체지향 프로그래밍 언어이다. C언어에 객체지향적 기능을 추가하여 만든 C++와는 달리 처음부터 객체 지향 언어로 개발되었다. 프로그래밍 언어programing language이다. 실행환경(JRE)과 개발도구(JDK), 라이브러리(API)를 포함한다. 모던 프로그래밍 언어 (객체지향 언어 + 함수형 언어) Java의 주요 특징 객체지향 언어이다. 객체를 만들기 위해 설계도인 클래스를 작성하고, 객체를 연결하여 목적이 맞는 프로그램을 만든다. 캡슐성, 상속화, 다형성을 지원한다. 하이브리드 언어이다. 컴파일 언어인 동시에 인터프리터 언어이다. 시스템에 무관한 이진 파일을 만듦으로써 컴파일 언어에 가까운 속도와 시스템 독립성을 얻을 수 있다. 자동 메모리 관리가 가능하다. 객체..