소프트웨어 개발 방법론: 애자일 프로세스
·
CS/교육팀
이번 주는 소프트웨어 개발 방법론: 애자일 프로세스에 관한 주제를 다루겠다. 이 글을 통해 애자일 프로세스가 무엇인지 정리하고자 한다. 소프트웨어 프로세스 우선, 소프트웨어 프로세스이다. 소프트웨어 프로세스란, 소프트웨어를 개발하기 위해 필요한 활동의 집합을 구조화해서 정리한 집합이다. 즉, 해야할 비슷한 활동들을 묶어놓은 것인데 적게는 4단계, 크게는 5단계로 구분한다. Specification: 요구사항과 기능을 정의하고 스펙을 명시하는 과정이다. Design and Implementation: 실제 코드를 설계하고 작성하는 개발과정 Validation: 작성한 코드가 요구사항대로 진행되는지 검증하는 Testing 과정 Evolution: 유지, 보수하는 과정 여기서 Design과 Implementa..
Git이란?
·
CS/교육팀
프로젝트를 한다하면 Git 을 무조건적으로 사용한다. 그렇다면 Git을 왜쓸까? 이번주차에는 Git에 대해 잘 모르는 사람들, 헷갈리는 부분을 짚고 Git의 작동원리에 대해 알아보는 시간을 갖겠다. Git이란? 우선, 깃 공식 사이트인 https://git-scm.com/ 에 들어가보면 다음과 같이 설명이 되어있다. 이를 번역해보면, `Git은 소규모 프로젝트부터 대규모 프로젝트까지 모든 것을 속도와 효율성으로 처리하도록 설계된 무료 오픈 소스 분산 제어 시스템`이라고 한다. 프로젝트에 사용하는 분산 버전 제어시스템이 핵심으로, 한마디로 정리하면 Git은 분산형 버전 관리 시스템이다. Git을 통해 프로젝트의 버전을 관리하는 것이다. 그렇다면 GitHub는 무엇일까? 말그대로, Git에 중심지, 중추를 ..
자바 병렬 프로그래밍 - 2장
·
PL/모던 자바 인 액션
보호되어 있는 글입니다.
자바 병렬 프로그래밍 - 1장
·
PL/모던 자바 인 액션
보호되어 있는 글입니다.
모던 자바 인 액션 5주차 - Chap06
·
PL/모던 자바 인 액션
보호되어 있는 글입니다.
Effective Java - item 44
·
PL/모던 자바 인 액션
표준 함수형 인터페이스를 사용하라 자바 표준 라이브러리에 여러 표준 함수형 인터페이스가 담겨있다. 따라서, 필요한 용도에 맞는게 이미 존재한다면, 직접 구현하지말고 표준 함수형 인터페이스를 사용하자. 총 43개의 인터페이스 중 대표적으로 기억해야할 기본 인터페이스 6개의 이름과 함수 시그니처는 다음과 같다. UnaryOperator: T apply(T t) BinaryOperator: T apply(T t1, T t2) Predicate: boolean test(T t) Function: R apply(T t) Supplier: T get() Consumer: void accept(T t) 이어서, 기본 인터페이스는 기본 타입으로 int, long, double로 각 3개씩 변형이 존재한다. 해당 기본 ..
Effective Java - item 42
·
PL/모던 자바 인 액션
익명 클래스보다는 람다를 사용하라 과거 자바는 추상 메서드 하나만 담은 인터페이스(현재의 함수형 인터페이스)를 사용해 함수의 타입을 표현했다. 이런 인터페이스의 인스턴스를 함수객체라 하였고 익명 클래스를 통해 함수 객체를 만들었다. 이는 과거 객체지향 디자인 패턴에는 충분한 방법이었다. 그러나, 함수형 프로그래밍이란 개념이 등장하며 익명클래스 방식은 코드가 너무 길기에 적합하지 않았다. 람다의 등장 자바 8 부턴 함수형 인터페이스의 인스턴스를 익명 클래스가 아닌 람다식을 사용해 만들 수 있게 되었다. 람다를 통해 훨씬 더 간결하게 코드를 만들고 어떤 동작을 하는지도 명확히 알 수 있었다. Collections.sort(words, (s1,s2)->Integer.compare(s1.length(),s2.l..
모던 자바 인 액션 스터디 - 3주차
·
PL/모던 자바 인 액션
이번 주는 지난 주에 이은 람다에 대한 마무리와 스트림에 대한 간단한 소개가 교재 내용의 주를 이룬다. 형식 검사, 형식 추론 제약 함수형 인터페이스가 존재한다면 람다 표현식을 구현할 수 있다. 그러나, 람다 표현식을 봤을때 어떤 함수형 인터페이스를 구현하는지는 알 수 없다. 어떻게 람다 표현식의 실제 형식을 파악할까? 1. 형식 검사 람다가 사용되는 컨텍스트를 통해 대상 형식을 확인할 수 있다. 대상 형식이란, 어떤 컨텍스트에서 기대되는 람다표현식의 형식을 의미한다. 아래 코드를 보자. List heavierThan150g = filter(inventory,(Apple apple) -> apple.getWeight()>150); 이러한 코드가 있을때 아래 5가지 과정을 거쳐 형식을 검사한다. 1. fi..
HashMap의 동작 구조
·
PL/모던 자바 인 액션
자, HashMap의 동작 구조에 대해 알아보자. HashMap vs HashTable 둘다 Java의 API의 이름이다. 또한 둘다 Map 인터페이스를 구현하고 있기에 제공하는 기능은 전반적으로 비슷하다. 다만 HashMap은 지속적으로 개선중에 있다는 점과 보조 해시 함수를 사용해 충돌을 덜 발생시킨다는 점에서 성능적인 면에서 유리하다. 아무튼! 둘다, key에 대한 해시값을 이용해 값을 저장하고 조회하며 동적으로 크기가 변하는 배열이라고 할 수 있다. 해시 분포 , 해시 충돌 완전한 해시함수란? X와 Y가 다를때, H(X)와 H(Y)의 값 다른 해시함수를 완전한 해시함수라고 한다. Boolean, Integer, Long, Double과 같은 객체는 완전한 해시함수 대상으로 삼을 수 있지만, Str..
Effectively final
·
PL/모던 자바 인 액션
Effectively final이란? final로 선언되지는 않았지만, 초기화된 이후 참조가 변경되지 않아 결과적으로 final처럼 동작하는 변수 자바의 익명클래스나 람다 표현식에서 식 외부에 있는 지역 변수를 참조할때는 반드시 final이거나 선언 후 참조가 변경되지 않는 effectively final이어야한다. 아래와 같이 final이 아닌 count를 익명 클래스에서 참조하면 다음과 같은 에러가 발생한다. 그렇다면 final은 알겠는데 Effectively Final은 무엇일까? 다음 조건을 만족하는 지역변수를 effectively final이라고 한다. - final로 선언되지 않았다. - 초기화 진행 후 다시 할당되지 않았다. - 전위, 후위에 증감 연산자가 존재하지 않는다. (++등) 객체의..
유쓰응
글쓰는 개발자 Youth