자바 (ref. 자바의정석) 24

함수형 프로그래밍 + 람다(재정리) JAVA

함수형 프로그래밍? 함수를 값으로 취급한다. 0개 이상의 인수를 가지며, 한 개 이상의 결과를 반환해야하고, 부작용(no side effect)이 없어야 한다. 함수나 메서드가 어떤 예외도 일으키지 않아야 한다. 여기서 부작용(Side Effect)이란 자료구조를 고치거나 필드에 값을 할당(setter 메서드 같은 생성자 이외의 초기화 동작) 예외 발생 파일에 쓰기 등의 I/O 동작 수행 함수형 프로그래밍의 주요 특성 1. 불변(Immutable) 객체를 사용한다 원본은 변하지 않기 때문에, 객체의 상태를 바꿀 수 없으므로 thread safe하다. 2. 참조 투명성(Referential Transparency) // Pure Function 동시에 함수를 처리해도 사이드이펙트 없이 동일한 값 출력시킬 ..

Object 클래스 - JAVA

java.lang 패키지 중에서도 가장 많이 사용되는 클래스는 바로 Obecjt이다. Obejct 클래스는 모든 클래스의 최고 조상이기 때문에 해당 멤버들은 모든 클래스에서 바로 사용이 가능합니다. 멤버변수는 없고 11개의 메서드만 가지고 있습니다. 해당 포스터에서는 5가지만 정리하도록 하겠습니다. equals(Object obj) 매개변수로 객체의 참조변수를 받아 비교하여 boolean 값으로 return 합니다. 두 객체의 같고 다름을 참조변수의 값으로 판단합니다. 그래서 두 객체가 다르면 항상 false를 반환하게 됩니다. 예제 코드를 들어 설명을 드리겠습니다. import java.io.*; public class Example { public static void main(String[] arg..

제어자(modifier) , 추상클래스 - JAVA

제어자란? 클래스, 변수 또는 메서드 선언부와 함께 사용되어 부가적인 의미를 부여한다. 크게 접근제어자와 그 외의 제어자로 나뉜다. 접근제어자 접근제어자란 외부에서 접근하지 못하도록 제한하는 역할을 한다. 클래스, 멤버변수, 메서드, 생성자에 사용할 수 있다. 이름 기능 public 접근 제한이 없다. protected 같은 패키지 내에서, 다른 패키지의 자손클래스에서 접근 가능 default 같은 패키지 내에서만 접근 가능 private 같은 클래스 내에서만 접근 가능 접근 범위는 public -> proteced -> (default) -> private 으로 오른쪽으로 갈 수록 범위가 좁아진다. 접근 제어자를 사용하는 이유? 정보은닉을 위해서, 즉 캡슐화를 하기 위함이다. 외부에게 불필요한 부분이 ..

기본형 매개변수와 참조형 매개변수 - JAVA

자바에서 많이 사용되는 메서드는 '반환타입 메서드이름 ( 매개변수 선언 ) { }' 구조로 이루어져 있습니다. 메서드를 호출할 때 매개변수로 지정한 값을 메서드의 매개변수에 복사해서 넘겨주는데 매개변수의 타입에 따라서 다릅니다. 기본형(primitive type) 매개변수 : 기본형 값이 복사, 변수의 값을 읽기만 할 수 있다. (read only) 참조형(reference type) 매개면수 : 변수의 값을 읽고 변경할 수 있다.(read & write) 무슨 차이가 있는지 예제를 통하여 보여드리겠습니다. 1. 기본형 매개변수 class Data{ int x; } public class Example { public static void main(String[] args) { Data data = ne..

기본형(Primtive Type) - JAVA

https://dding9code.tistory.com/45?category=1258691 변수 포스팅을 했었는데 그중 기본형에 대하여 내용이 부실하여 추가로 글을 쓰게 되었습니다. 기본형이란? 실제 값(data)을 저장하는 데이터 타입으로 논리형, 문자형, 정수형, 실수형 으로 나누어 집니다. 논리형 (boolean) - 논리형은 boolean 하나만 존재하며, boolean 변수는 true, false 밖에 저장을 할 수 없다. 기본(default)는 false 이다. 주로 대답(yes/no), 스위치(on/off), 플래그 등의 논리구현에 주로 사용된다. true, false 만을 사용하기에 1bit 로 충분하지만 자바에서 데이터를 다루는 최소 단위는 byte이다. 그래서 boolean의 크기는 1..

람다식(Lambda expression) - JAVA

람다식이란? 람다식은 메서드를 하나의 식으로 표현한 것입니다. 메서드를 간략하면서도 명확한 식으로 표현할 수 있게 해주며, 메서드의 이름과 반환값이 없어지므로 '익명함수(anonymous function)' 이라고도 합니다. 람다식은 '익명 함수' 답게 메서드에서 이름과 반환타입을 제거하고 매개변수 선언부와 몸통{ } 사이에 ' -> ' 를 추가합니다. //기존방식 반환타입 메서드이름(매개변수 선언) { 문장들 } //람다사용 (매개변수 선언) -> { 문장들 } 람다식의 장단점 장점 1. 코드를 간결하고 명확하게 만들 수 있다. 2. 함수를 만드는 과정이 없어 생산성이 높아진다. 3. 다중 cpu를 활용하는 형태로 구현되어 병렬 프로그래밍에 유리 단점 1. 남발하여 사용할 경우 가독성이 오히려 떨어짐 ..

제네릭스(Generics) - JAVA

제네릭스 제네릭스란 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 해주는 기능입니다. 타입체크를 함으로써 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어들게 됩니다. 타입 안정성이 높다는 뜻은 의도하지 않는 타입의 객체가 저장되는 것을 막고, 저장된 객체를 꺼내올 때 다른 타입으로 잘못 형변환되어 발생할 수 있는 오류를 줄여 줍니다. 그래서 코드를 안전하게 작성이 가능하고, 형변환의 번거로움이 줄어 코드가 간결해집니다. 제네릭 클래스를 한번 만들어 보겠습니다. import java.util.ArrayList; class GenericExam { public static void main(String[] args) { MyGeneric myGeneric = new My..

Set, Map - JAVA

이전에 포스팅한 컬렉션프레임워크에서 추가로 정리하지않은 Set 과 Map 을 정리하여 포스팅을 시작하겠습니다. Set 인터페이스 - Set 인터페이스는 중복을 허용하지 않고 저장순서가 유지되지 않는 컬렉션 클래스를 구현하는데 사용됩니다. 대표적으로는 HashSet, TreeSet 이 있습니다. HashSet Set 인터페이스를 구현한 가장 많이 사용되기도 하는 대표적인 컬렉션 입니다. Set 인터페이스의 특징대로 HashSet 도 중복된 요소를 저장하지 않습니다. Hashset은 중복을 허용하지 않기 위해 객체를 추가하기 전에 기존에 저장된 요소와 같은 것인지 판단하기 위해 요소의 equlas() 와 hashCode()를 호출 합니다. 만약 객체를 비교한다고하면 equlas()와 hashCode()를 목..

컬렉션 프레임워크(Collections Framework) - JAVA

컬렉션 프레임워크란? 데이터 군을 저장하는 클래스들을 표준화한 설계를 뜻합니다. 다수의 데이터를 쉽고 효과적으로 처리할수 있게 다양하고 많은 클래스들을 제공하고 인터페이스와 다형성을 이용한 객체지향적 설계가 표준화되어 재사용성이 높은 코드를 작성할 수 있는 장점이 있습니다. 컬렉션 프레임워크 핵심 인터페이스 컬렉션 프레임워크는 컬렉션을 다루는데 필요한 주요 인터페이스를 정의하고 있습니다. Map 인터페이스는 컬렉션 인터페이스와 다른 형태로 컬렉션을 다루기 때문에 상속 계층도에 포함되지 못하고 별도로 정의됩니다. 인터페이스 특징 List 순서가 있는 데이터의 집합, 데이터의 중복을 허용 - 구현클래스: ArrayList, LinkedList, Stack, Vector 등 Set 순서를 유지하지 않는 데이터..

Comparator 와 Comparable - JAVA

처음 이 개념을 접했을 때는 뭐지.. 인터페이스는 뭐고, 객체는 뭐고 어떻게 쓰는 거지 했는데 공부하다 보니 인터페이스도 알게 되고, 객체도 알게 되니 '아! 이래서 이렇게 쓰는구나' 하고 깨달음을 얻었다. 그래서 혹시 만약 인터페이스나 객체 등 여기 관련된 어떤 개념을 모른다면 그부분을 먼저 배우면 빠르게 습득이 가능할 것입니다. 아마 위 개념을 모른다면 Arrays.sort( )을 호출하면 알아서 배열을 정리하는 것으로 생각을 하셨을 가능성이 높습니다. 사실 이 정렬기능은 Comparable의 구현에 의해 정렬되었던 것입니다. 정렬을 하려면 '기준'이 필요합니다. Comparator와 Comparable은 모두 인터페이스로 객체를 비교할 수 있도록 만들게 하고, 이것을 사용하려고하면 인터페이스니 선언..