Variable used in lambda expression should be final or effectively final 아래와 같이 java 코드를 작성하면 intellij에서 오류를 뱉으며 컴파일되지 않는다. int number = 1234; number = 2; Runnable r = () -> System.out.println(number); 결론부터 말하면, 람다에서는 파라메터가 아닌 외부 변수(free variable, 자유변수)를 사용 할 수 있다. 단, 지역변수는 final이거나 final처럼 사용되어야한다.(effectively final) 그 이유를 알아보자. 변수 변수에는 클래스변수, 인스턴스 변수, 지역변수가 있다. public class test { int iv; // 인스..
익명클래스 java에서는 아래와 같은 클래스가 있을 때, 익명 클래스로 만들 수 있다. // 부모 클래스 class Animal { public String bark() { return "동물이 웁니다"; } } // 자식 클래스 class Dog extends Animal { @Override public String bark() { return "개가 짖습니다"; } } public class Main { public static void main(String[] args) { Animal a = new Dog(); a.bark(); } } class Animal { public String bark() { return "동물이 웁니다"; } } public class Main { // 익명 클래스 ..
Quartz는 Job Scheduling라이브러리이다. Job은 주로 대용량의 데이터를 처리하는 배치 작업이나 프로세스를 의미하고, Scheduling은 특정한 시간이나 이벤트 발생 등의 조건을 만족할 시 Job을 자동으로 실행하는 것을 의미한다. https://www.lgcns.com/blog/cns-tech/bigdata/13147/ 대용량 데이터 처리 업무에 효율을 더하다 'J-Jobs' - LG CNS LG CNS가 개발한 Job Scheduler인 ‘J-Jobs’, 들어보셨나요? 앞으로 총 세 차례에 걸쳐 여러분께 소개드릴 예정인데요. 첫 순서인 이번 시간에는 ‘Job Scheduling’과 ‘Workload Automation’의 개념에 대해서 www.lgcns.com 단순히 몇 번 반복하는 ..
JDK8을 설치할 것이다. Oracel 접속 https://www.oracle.com/kr/java/technologies/javase/javase8-archive-downloads.html java8 download라고 검색해서 다음 페이지에 접속한다. Java SE Development Kit 8이 맞는지 확인한다. 아래로 내려보면.. window64버전이 있다. 자기 운영체제에 맞는 버전을 선택한다. 참고로 x86은 window32를 말한다. 체크하라니까 체크도 하고 로그인하라니까 로그인도 해준다.(귀찮아) 설치하기 다운로드된 exe파일을 열고 실행한다. 이 화면에서는 원하는 위치를 선택해주고 next 설치가 끝나면 jre설치 창이 나온다. 원하는 위치 선택해주고 설치진행 설치가 완료됐다. 환경변수..
컬렉션(collection) JDK는 자료구조 과목에서 배운 많은 것들을 컬렉션으로 만들어 제공한다. 이것들은 매우 유용하게 사용되기 때문에 꼭 알아둘 필요가 있다. 컬렉션에는 Vector, ArrayList, LinkedList, HashMap등이 있다. 컬렉션의 특징 - 컬렉션은 제네릭으로 만들어져 있다. - 요소는 객체만 가능하다 ( int X, Integer O) Vector v = new Vector(); 제네릭의 개념 ArrayList 라는 것을 본 적이 있을 것이다. 여기서 E는 여러 종류의 타입으로 변신할 수 있도록 컬렉션을 일반화시키기 위해 사용한다. ArrayList라고 하면 ArrayList에 Integer도 String도 모두 넣을 수 있다. 를 구체화시켜서 ArrayList라고 하..
추상메소드 추상 메소드는 abstract를 사용하여 껍데기만 작성한 메소드다. 추상메소드가 있는 class를 추상클래스라고 한다. 추상클래스는 미완성 설계도에 비유하며, 인스턴스화 할 수 없다. 예를 들어 TV를 만드는데 대부분의 TV는 90%가 같은 기능이라고 하자. 그렇다면 설계도의 90%는 같으므로, 미리 90%가 만들어진 설계도를 작성해놓는 것이 좋을 것이다. 이때 쓰는 것이 바로 추상 클래스이다. 추상메소드의 디테일한 내용은 추상클래스를 상속받아 오버라이딩하여 구현해야 한다. abstract class Shape { // 추상 클래스 선언 public Shape() { } // 생성자 public void paint() { draw(); } // 일반적인 메소드도 구현할 수 있다. abstrac..
상속의 개념 상속(inheritance)은 실세계의 유전과 비슷하다. 상속을 받으면 부모의 모든 필드와 메소드를 자식이 그대로 받는다. 예를 들어 사람은 먹기, 자기를 할 수 있다. 사람을 상속받은 학생은 부모의 특성을 물려받아 먹기, 자기도 할 수 있을 뿐만 아니라 공부하기도 할 수 있다. 이처럼 상속을 통해 기능을 확장(extends)할 수 있다. 상속을 표현할 때는 extends를 사용한다. class Person { public void eat(){ System.out.println("eat"); }; public void sleep(){ System.out.println("sleep"); }; } class Student extends Person{ public void study(){ Syst..