예정 ¶
- 방학정모는 17시 00분부터 이루어집니다.
- OMS : 김선재
- 자바란?
- 1990년대에 '썬 마이크로시스템즈' 라는 회사에서 가전제품에 쓸 프로그래밍 언어를 만듦. 자바의 시초가 됨.
- 1990년대 말에 인터넷 보급이 확산되면서 자바가 웹 서버로 부상함.
- 현재는 엔터프라이즈단에서 스프링 프레임워크를 제일 많이 쓰이고, 안드로이드 플랫폼에서 자바 언어를 사용하고, 데스크톱 전용 개발로 JavaFX를 사용하고 있다.
- 객체지향 프로그래밍으로 여러 부품들을 만들어 서로 연결하며 하나의 물건(프로그램)을 만듦. 부품 대체도 쉬움
- 자바8 새기능
- OOP
- 예를 들어, 자동차(객체)를 만들고 싶음.
- 보통 자동차(추상클래스)가 가지고 있는 것(필드, 속성) : 창문(객체), 와이퍼(객체), 색, 모델명 등
- 보통 자동차(추상클래스)가 해야 하는 것(메소드, 동작) : 굴러가기, 와이퍼 움직이기 등
- 자동차의 공통 사용방법(인터페이스) : 핸들조작법, 와이퍼사용법, 창문여는법
- 자동차의 공통 사용방법(인터페이스) : 어느 자동차라도 동일, 내부 구조들 알 필요 없다.
- 마티즈를 만들어보자.
- 상속 : 위에서 만든 '자동차'의 특성들을 그대로 몰려받음.
- 메소드 재정의 : 위에서 만든 '자동차'의 행동들을 '마티즈'식으로 바꿈
- 타이어를 갈아보자. 1 (다형성)
- 자동차는 그냥 어떤 타이어든 사용해도 됨.
- 타이어의 특성을 몰려받아 한국 타이어 객체, 금호 타이어 객체 등으로 만들 수 있음.
- 클래스 : 설계도, 인스턴스 : 클래스(설계도)로부터 나온 객체
- 같은 마티즈라도 색(속성)들이 다를 수 있음.
- 타이어를 갈아보자. 2 (다형성)
- 타이어에 규격(인터페이스)이 있음
- 다른 타이어 객체는 그 규격을 따르기(구현)만 하면 됨.
- 자동차는 어떤 타이어 객체든 사용방법(인터페이스 메소드)은 동일하기 때문에 굳이 어떤 타이어인지 알 필요 없이 바로 사용 가능
- 이 과정을 자동 타입 변환 이라고 함.
- 타이어 객체(부모)를 다시 한국이나 금호 타이어 객체(자식)로! : 강제 타입 변환이라 하며, 명시적으로 자식클래스를 타입변환해야한다/
- 조건은, 자동 타입 변환인 상태여야 한다. : 자식클래스 변수 = (자식클래스) 부모클래스타입;
- 객체타입확인 연산자 : instanceof
- 람다식
- 주로 함수형 프로그래밍에서 사용. 병렬 처리가 쉽고 이벤트 지향적이다.
- 자바에서는 익명 구현 객체를 손쉽게 만들 수 있게 해준다.
- Runnable runnable = () -> { ... }; 가능
- (타입 매개변수, ...) -> { 실행문; ...; (return ~;) } 형식
- 함수적 인터페이스
- 람다식의 타겟 타입은 하나의 추상메소드만을 가진 인터페이스
- @FunctionalInterface 어노테이션을 인터페이스 선언 위에 붙이면, 컴파일 시 컴파일러가 함수적 인터페이스의 조건(하나의 추상메소드만을 가짐)을 체크해준다. 만약에 조건에 맞지 않는다면, 컴파일 오류를 발생시킨다.
- 표준 API의 함수적 인터페이스
- java.util.function 패키지에 있음
- 메소드 또는 생성자의 매개 타입으로 람다식으로 '함수'를 전달
- 종류
- Consumer
- 매개값 : O
- 리턴값 : X
- 추상메소드 : accept()
- Supplier
- 매개값 : X
- 리턴값 : O
- 추상메소드 : get()
- Function
- 매개값 : O
- 리턴값 : O
- 매핑 용도, 타입 변환
- 추상메소드 : apply()
- Operator
- 매개값 : O
- 리턴값 : O
- 매개값을 연산
- 추상메소드 : apply()
- Predicate
- 매개값 : O
- 리턴값 : O
- 매개값을 조사
- 추상메소드 : test()
- 스트림
- 저장 요소를 하나씩 참조해서 람다식으로 처리
- 컬렉션 또는 배열에서 요소를 하나하나 처리하려면, 기존 방식은 컬렉션,배열에 iterator 을 뽑아 하나씩 하나씩 hasNext() while 문으로 했다.
- 스트림은 컬렉션,배열에서 스트림을 가져와 람다식으로 쉽게 처리코드를 쓸 수 있다.
- 스트림의 특징
- 람다식으로 요소 처리 코드 제공
- 내부 반복자 사용
- 병렬 처리가 쉽다.
- 중간 처리와 최종 처리를 할 수 있다.
- <람다식으로 요소 처리 코드 제공>
- 함수적 인터페이스 활용
- void forEach(Consumer<T> action)
- <내부 반복자 사용>
- 외부반복자는 개발자코드에서 직접 컬렉션을 조회(get index)해서 처리
- 내부반복자는 컬렉션에 처리코드만을 전달한 뒤 내부에서 알아서 요소별로 처리
- <병렬 처리가 쉽다.>
- 한가지 작업을 여러 서브 작업으로 나눔
- 각각의 스레드가 여러 서브 작업을 처리
- 그 뒤에 처리를 취합 후 최종 결과를 도출
- <중간 처리와 최종 처리를 할 수 있다.>
- 컬렉션, 배열의 스트림에서 중간 처리와 최종 처리를 할 수 있다.
- 중간 처리는 필터링 처리 스트림과 매핑 처리 스트림이 있다.
- 필터링 처리 스트림은 오리지널 스트림에서 특정 조건을 충족하는 객체만을 분류한다.
- 매핑 처리 스트림은 객체를 다른 속성의 객체로 변환시킨다.
- 최종 처리는 집계를 처리할 때 주로 쓰인다. (반복, 카운팅, 평균, 총합 등)
- 참고 도서
- 이것이 자바다 / 신용권 지음 / 한빛 미디어
- 진행 사항 공유
- 장소 : 310관 731호
- MT 계획 4 - 회장이 따로 올려놓겠음
진행 ¶
- 참여 : 박인서, 김선재, 한재민
- OMS : 김선재 - Java 8과 OOP
- 다음 OMS 주자 - 유재범 학우의 Unreal Engine 맛보기
- 스터디
- 프로젝트
- New! <script=JaSal.js> - 웹 페이지 만들겁니다. 신규 인원 모집중
- KAKAO Code Festival - Festival 답게 폭죽을 쏴서 퍼엉!