Programming Language/Java
[Java] 객체지향 요약
[Java] 객체지향 요약
2021.10.29코드의 재사용성 / 유지보수 / 중복된 코드의 제거에 집중해 객체지향 개념을 공부하자. 클래스 : 객체를 정의해 놓은 것. 객체를 생성하는데 사용된다. (클래스와 객체는 다르다.) 여기서 객체는 클래스에 정의된 내용대로 메모리에 생성된 것을 뜻한다. (객체는 인스턴스라고도 불린다.) 객체를 생성하기 위해서는 클래스를 먼저 정의해야 한다. Java에서도 프로그래밍을 휘애 유용한 클래스들을 많이 제공한다. 입력받을 때 사용하는 Scanner, 문자열을 정의할 때 사용하는 String 등.. 여러 가지 클래스들이 있다. Scanner sc = new Scanner(System.in); 위의 코드를 읽어보면, Scanner 클래스 타입의 참조변수 sc를 선언 후 new 연산자를 통해 Scanner 인스턴스(객체..
[Java] 스트림 (Stream)
[Java] 스트림 (Stream)
2021.10.25많은 수의 데이터를 다룰 때, 컬렉션이나 배열을 활용했다. 물론 이렇게 데이터를 다루는 방법도 매우 효과적이지만, 이런 방식으로 작성된 코드는 가독성이 좋지 않고, 재사용성이 떨어지는 등 여러 가지 단점이 있다. 이런 단점들을 극복하기 위해 스트림이 만들어졌다. 스트림은 데이터 소스를 추상화하고 데이터를 다룰 때 자주 사용되는 메서드들을 정의해 뒀다. 바로 코드를 통해 알아보자. String 배열을 생성하고, 그 배열을 소스로 스트림을 생성한다. (배열 말고도 LinkedList, ArrayList 등 여러 가지가 소스가 될 수 있다) 이 다음 스트림의 여러 가지 메서드들을 읽어보자. String은 Comparable이 정의돼있기 때문에(순서가 정의돼있기 때문에) sort 메서드로 정렬이 가능하다. 위의..
[Java] 람다식 (Lambda expression)
[Java] 람다식 (Lambda expression)
2021.10.25모든 걸 객체로 생각하는 객체지향언어인 자바가 JDK1.8부터 람다식을 추가함으로써 자바는 객체지향언어인 동시에 함수형 언어가 됐다. 람다식을 어떻게 사용하는지에 초점을 맞춰 공부해보자. 함수(자바에서는 메서드)를 다룰 때 세 가지 특징이 있다. 1. 함수 자체를 변수로 저장할 수 있다. 2. 함수를 다른 함수의 매개변수로 쓸 수 있다. 3. 함수 자체를 반환할 수 있다. 위의 세 가지 특징을 만족하는 함수를 일급함수라고 한다. 함수형 언어는 일급함수를 지원하고, 지원하기 위한 다양한 특징이 있다. 자바도 일급함수를 지원하고 싶었고, 이 생각에 기반해 람다식이 등장했다. 함수 자체를 변수로 저장해야 하는데, 함수 자체에도 이름이 있다. 그렇기에 변수의 이름과 함수의 이름이 충돌이 있을 수 있다. 이를 해..
[Java] 컬렉션 프레임웍 (Collections Framework)
[Java] 컬렉션 프레임웍 (Collections Framework)
2021.10.19Collection : 데이터 그룹 Framework : 표준화된 프로그래밍 방식 다양한 데이터 타입들을 하나의 그룹으로 모아 처리할 수 있게 해 준다. List Set Map 이 세 가지가 컬렉션 프레임웍의 핵심 인터페이스이다. List와 Set를 구현한 컬렉션 클래스들은 서로 많은 공통부분이 있어 공통부분을 Collection 인터페이스로 정의하고 List와 Set는 Collection 인터페이스를 상속받도록 설계했다. 그러니까 정리하면 Collection이 맨 위에 있고 그 밑에 List와 Set, 그리고 List와 Set를 상속받는 친구들이 밑에 있는 형식이다. List로 구현한 ArrayList와 LinkedList, Stack같은 친구들은 Collection과 List의 메서드는 물론 자신의 ..
[Java] 열거형 (enums)
[Java] 열거형 (enums)
2021.10.18순서가 있는 자료들을 나열할 때 사용한다. 여러 상수(final)들을 정의할 때 유용하게 사용된다. 자바의 열거형은 값과 타입을 모두 체크해 타입에 안전한 열거형이라고 한다. 열거형은 다음과 같은 형식으로 정의할 수 있고, 꼭대기의 클래스 / 인터페이스 / static 에만 정의될 수 있다. (메서드에서는 정의될 수 없다.) 열거형 상수간에는 "==" 로 비교할 수 있다. String을 비교할 때는 원래 equals()메서드를 통해 비교했는데, 열거형은 둘 다 가능하다. (그만큼 성능이 좋고, 빠르다.) 다만, 같은 비교 연산자는 사용할 수 없는데, 대신 compareTo()메서드를 이용해 열거형 상수들을 비교할 수 있다. 다음 코드를 작성했을 때 a b c d abcd 에는 각각 0 1 2 ..
[Java] 지네릭스 (Generics)
[Java] 지네릭스 (Generics)
2021.10.17지네릭스를 통해 타입안정성을 확보하고 코드 작성 시 형변환을 생략해 코드를 간결하게 작성할 수 있다. 지네릭스는 다양한 타입의 객체들을 다루는 메서드나 클래스 (List같은 것들) 에 컴파일 시 타입체크를 해 주는 기능을 한다. 실제로 큰 프로젝트를 진행할 때 타입 안정성때문에 쓰레기값이 나오는 경우가 있으면 안 되니까.. 런타임체크가 아니라 컴파일체크인 것도 알아놓자. 계속 봐도 모르겠으면 코드 짜면서 공부하고, 지금은 지네릭스는 타입체크를 위한 이름표구나~ 라고만 생각하자. 타입 안정성 + 형변환 생략(성능 향상) 지네릭 클래스는 클래스나 메서드에 선언할 수 있다. 왼쪽 코드를 지네릭 클래스로 변환하면 왼쪽과 같이 변한다. 여기서 T는 타입 변수로, 아무거나 써도 되고 안에는 comma를 사용해 여러..
[Java] Scanner클래스의 nextLine()과 next() 사용 시 주의점
[Java] Scanner클래스의 nextLine()과 next() 사용 시 주의점
2021.10.05한 줄로 입력받아 split을 이용해 배열로 처리해 줄 때 nextLine() 메서드를 쓰는 경우가 많다. 하지만, nextLine()과 next() 메서드를 함께 쓸 때, 가끔씩 원하는대로 입력되지 않는 경우가 있다. 어떤 이유 때문인지, 어떻게 해결할 수 있을 지에 대해 알아보자. 선행 지식으로 버퍼에 대한 지식이 필요하다. 데이터를 한 곳에서 다른 곳으로 전송할 때, 임시로 데이터를 보관하는 영역을 버퍼라고 한다. 즉 스캐너를 통해 키보드로 입력을 받을 경우, print로 출력을 할 경우 모두 데이터가 버퍼에 저장된다. int a = sc.nextInt(); 위 코드의 실행 과정을 살펴보자. 스캐너 클래스의 nextInt() 메서드가 실행된 직후에는 버퍼에 아무 내용도 없기 때문에 키보드로부터 입력..