일반적인 Arrys.sort()를 사용하면, 컴퓨터는 배열에 대해 정렬을 수행한다. 이는 컴퓨터의 내부적인 정렬이 아닌 각 자료형의 래퍼 클래스(Integer, String... etc)들이 Comparable 인터페이스를 구현함으로서 정렬이 가능한 것이다. 정렬 기준을 만드는데 있는 인터페이스에는 Comparable뿐만아니라 Comparator도 있다. 두 인터페이스 모두 객체를 비교한다는 같은 기능을 목적으로 고안된 것이다. 이 두 인터페이스는 Java Collection Framework에 소속되어있다. Comparator Document : https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Comparator.html C..
Language/Java
람다식이란 람다식이란 간단히 말해 메소드를 하나의 '식'(expression) 으로 표현한 것이다.람다식은 함수를 간략하면서도 명확하게 표현할 수 있다는 장점이 있다. 메소드를 람다식으로 표현하면, 메소드 이름, 반환타입이 없어지므로 익명함수(Anonymous Function)이라고도 부른다.예를들어 아래와 같이 사용할 수 있다. int[] arr = new int[5]; Arrays.setAll(arr,(i) -> (int)(Math.random() * 5) + 1); 람다식 작성하기 람다식의 기본 형태는 아래와 같이 생겼다 (매개변수 선언) -> {문장들} 다만 여기서 반환값이 있는경우에서 두가지 경우로 작성해줄 수 있다. return문을 포함한 람다식 (statement가 된다. ;를 붙여야 된다...
Maven? Maven은 Java용 프로젝트 관리 툴이다. Apache Ant를 대체하기 위해 만들어 졌으며, 컴파일,테스트, Javadoc생성, 테스트 리포트 생성, 프로젝트 사이트 생성, JAR생성, 서버에 Deploy(전개 / 배포) 등의 기능들을 가지고 있다. pom.xml의 태그에 프로젝트에서 사용할 JAR라이브러리 이름, 버전을 지정함으로서 외부 사이트에서 관리되고 있는 JAR을 자동으로 다운로드하고, 로컬에서 빌드가 가능하다. Maven설치하기 1. brew install gcc 2. Maven 설치하기 : brew install maven은 openjdk가 같이 설치되므로아래 링크로 들어가서 Binary tar.gz archive를 다운로드해줍니다. https://maven.apache.o..
제네릭스란? 제네릭스란 다양한 타입의 객체들을 다루는 메소드나 컬렉션 클래스 컴파일시 타입 체크를 해주는 기능이다. 객체 타입을 '컴파일 시' 체크하므로 안정성을 높이고 형변환의 번거로움이 줄어든다. 타입 안정성을 높인다는것은 의도하지 않은 타입의 객체가 저장되는것을 막는다는 소리이다. 정리해보면 제네릭스의 장점은 아래와 같다. 타입 안정성을 제공한다 타입 체크와 형변환을 생략할 수 있으므로 코드가 간결해진다. 제네릭을 적용한 제네릭 클래스 선언을 해보자 package generic; class Box{ T item; void setItem(T item){ this.item = item; } T getItem(){ return this.item; } } Box에서 'T'를 타입변수라고 하며 T가 아닌 다..
1. Collection Framework? 컬렉션 프레임웍이란 데이터군을 저장하는 클래스들을 표준화한 설계를 의미한다. 여기서 프레임웍이란 표준화된 프로그래밍 방식을 의미한다. 2. 컬렉션 프레임웍의 핵심 인터페이스 컬렉션 프레임웍의 핵심 인터페이스는 세가지가 존재한다. List : 순서가 있는 데이터 집합, 데이터 중복을 허용한다 (ArrayList, LinkedList, Vector, Stack) Set : 순서가 유지되지 않는 집합, 데이터 중복을 허용하지 않는다.(HashSet, TreeSet) Map : 키 - 값 쌍으로 이루어진 데이터 집합. 순서는 유지되지 않으며 키는 중복을 허용하지 않고, 값은 중복을 허용한다 주의할 것은 위 세가지 모두 '인터페이스'라는 것이다. 그리고 여기서 공통점이..
Collection Framework란 데이터 군을 저장하는 클래스들을 표준화한 설계를 의미한다. 컬렉션은 다수의 데이터를 의미하고, 프레임워크는 표준화된 프로그래밍 방식을 의미한다. 컬렉션 프레임 워크에서는 컬렉션데이터 그룹을 크게 3가지 타입이 존재한다 인식하고, 각 컬레션을 다루는데 필요한 기능을 가진 3개의 인터페이스를 정의한다. 여기서 세가지는 아래와 같다. List Set Map 이중 인터페이스 List,Set의 공통적인 부분을 뽑아 Collection을 추가로 정의하였다. Map은 공통적인 면이 아예 없어 독립적 인터페이스이다. 컬렉션데이터 그룹의 각각의 특징은 아래와 같다. List : 데이터 중복을 허용하고, 저장 순서가 유지된다. Set : 데이터 중복을 허용하지 않고, 저장 순서가 유..
예외와 에러의 차이점 에러(Error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류. StackOverflow에러나 OutOfMemory오류와 같이 발생하면 복구가 불가능한 심각한 오류이다 예외(Exception) : 발생하더라도 수습이 되는 덜 심각한 오류. 예외는 발생하더라도 적절한 코드를 작성해 비정상적 종료를 막을 수 있다. 자바 예외 클래스 계층 구조 Exception클래스도 기본적으로 Object클래스의 자손클래스이다. 또한 예외 클래스는 두 그룹으로 나눌 수 있다 Exception클래스와 그 자손들(RuntimeException, 이의 자손 제외) : 사용자의 실수와 같은 외적인 요인에 의해 발생되는 예외를의미한다. 존재하지 않는 파일을 입력한다거나(FileNotFoundExcep..
상속?? 포함관계?? 클래스를 작성하는데에 있어서 상속관계를 맺어줄 것인지, 포함관계를 맺어줄것인지를 고민해야한다. //상속 package Interface2; class point{ private int x; private int y; } class Circle extends point{ } public class inheritex { public static void main(String[] args){ } } //포함관계 package Interface2; class point{ private int x; private int y; } class Circle{ point p = new point(); } public class inheritex { public static void main(Stri..
내부클래스란 내부 클래스는 클래스 내에 선언되는 클래스 형태이다. 내부 클래스의 장점은 아래 두가지로 볼 수 있다. 내부 클래스에서 외부클래스의 멤버들을 쉽게 접근할 수 있다 코드의 복잡성을 줄 일 수 있다. package Interface2; class A{ class B{ } } 내부 클래스의 종류, 특징 내부 클래스종류는 변수 선언위치에 따른 종류와 동일하다. 종류와 특징은 아래와 같다. 내부클래스 특징 인스턴스 클래스 멤버변수 선언위치와 동일한 위치에 선언, 인스턴스 멤버처럼 다뤄진다. 주로 외부 클래스의 인스턴스 멤버들과 관련된 작업에 사용 스태틱 클래스 static멤버처럼 다루어진다. static메소드에서 사용될 목적으로 사용 지역 클래스 외부클래스 메소드나, 초기화 블록 안에 선언, 선언된 ..
인터페이스란? 인터페이스는 일종의 추상클래스이다. 추상클래스처럼 추상 메소드를 갖지만, 추상화 정도가 높아, 추상 클래스와 달리, 몸통을 갖춘 일반 메소드 또는 멤버변수를 구성원으로 가질 수 없다. 오직 추상 메소드와 상수만 멤버로 가질 수 있다. 추상 클래스를 미완성 설계도로 본다면, 인터페이스는 기본 설계도라고 할 수 있다. 인터페이스 작성하기 인터페이스 작성은 클래스와 동일하다. 단, 키워드로 class가 아닌, interface를 작성한다. 인터페이스의 멤버들에는 일반적인 클래스, 멤버들과 달리 제약사항이 있다. 모든 멤버변수는 public static final이어야 하며(인터페이스는 멤버변수로 상수만 가질 수 있다) 이를 생략할 수 있다. 모든 메소드는 public abstract이어야하며, ..
추상클래스 추상클래스란, 미완성 설계도에 비유할 수 있다. 이는 단지, 미완성 메소드(추상메소드)를 포함하고 있다는 의미이다. 추상클래스 자체는 클래스로서 역할은 못한다. 하지만, 새로운 클래스를 만들때 바탕이 되는 클래스이다. 기본적인 형태는 이와같이 abstract를 붙여 클래스를 선언해 주면 된다.. abstract class test1{ } 추상클래스는 일반 클래스와 다르지 않다 생성자도 있으며, 멤버변수, 메소드도 가질 수 있다. 추상 메소드 추상 메소드는 선언부만 작성하고, 구현부는 작성하지 않은채로 남겨둔 것이다. 실제 수행할 내용을 작성한게 아니기 때문에 미완성 메소드인것이다. 이를 만든 이유는, 상속받는 클래스에서 내용이 달라질 수 있기 때문이다. 선언부만 작성하고, 주석으로 어떤부분을 ..
다형성 다형성은 객체지향의 특징중 하나이다(객체지향의 특징 : 캡슐화, 다형성, 상속성, 동적바인딩, 추상화). 다형성이란, 여러가지 형태를 가질 수 있는 능력을 의미한다. 자바에서 다형성이란, 한 타입의 참조변수로 여러 타입 객체를 참조하는것을 의미한다. 좀 더 자세한 의미로는 조상클래스 타입의 참조변수로 자손타입 인스턴스를 참조할 수 있다. 아래코드를 예시로 들어보자 class tv{ private boolean power; private int channel; tv(int channel){ this.channel = channel; } public boolean getPower(){ return this.power; } public int getChannel(){ return this.channel..