= 예정 = * '''방학정모는 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 action) * <내부 반복자 사용> * 외부반복자는 개발자코드에서 직접 컬렉션을 조회(get index)해서 처리 * 내부반복자는 컬렉션에 처리코드만을 전달한 뒤 내부에서 알아서 요소별로 처리 * <병렬 처리가 쉽다.> * 한가지 작업을 여러 서브 작업으로 나눔 * 각각의 스레드가 여러 서브 작업을 처리 * 그 뒤에 처리를 취합 후 최종 결과를 도출 * <중간 처리와 최종 처리를 할 수 있다.> * 컬렉션, 배열의 스트림에서 중간 처리와 최종 처리를 할 수 있다. * 중간 처리는 필터링 처리 스트림과 매핑 처리 스트림이 있다. * 필터링 처리 스트림은 오리지널 스트림에서 특정 조건을 충족하는 객체만을 분류한다. * 매핑 처리 스트림은 객체를 다른 속성의 객체로 변환시킨다. * 최종 처리는 집계를 처리할 때 주로 쓰인다. (반복, 카운팅, 평균, 총합 등) * 참고 도서 * 이것이 자바다 / 신용권 지음 / 한빛 미디어 * 진행 사항 공유 * '''장소 : 310관 731호 ''' * 스터디 및 프로젝트 - [활동지도/2017] * MT 계획 4 - 회장이 따로 올려놓겠음 = 진행 = * 참여 : [박인서], [김선재], [한재민] * OMS : 김선재 - Java 8과 OOP * 다음 OMS 주자 - [유재범] 학우의 Unreal Engine 맛보기 * 스터디 * [킹갓제네럴엠페러무근's머신러닝] - 딥러닝 + 갓소마의 데이터 처리 * [MFC++], [LaLaLand] - 퍼엉... * [R아봅시다] - 아직 인원 뽑아요 * 프로젝트 * New! - 웹 페이지 만들겁니다. 신규 인원 모집중 * KAKAO Code Festival - Festival 답게 폭죽을 쏴서 퍼엉!