본문 바로가기

람다표현식 (1) 람다표현식 한번이든 여러번이든 나중에 실행할 수 있게 전달하는 코드 블록.문법 : (String first , String second) -> first.length() - second.length()(String first , String second) ->{int difference = first.length() < second.length();if(difference < 0) return -1;else if(difference >0) return 1;else return 0;}여러 줄로 작성할 떄는 메서드를 작성하는 것처럼 작성한다.람다 표현식이 파라미터를 받지 않으면 파라미터가 없는 메서드처럼 빈 괄호를 붙임Runnable task = () -> {for (int i=0;i first.length..
인터페이스 (2) 인터페이스 기본메서드인터페이스 메서드 중 어느 것이든 기본 구현을 작성할 수 있다. (추상클래스는 안됨)인터페이스 메서드 충돌 public interface Person{default int getId(){return 0;}}public interface Identified{default int getId(){return Math.abs(hashCode());}}이렇게 두개의 인터페이스가 있을 때 하나의 클래스에서 두 인터페이스를 상속받으면 어떻게 해야할까?방법은 고유의 getId()를 클래스에서 새로 작성하거나, 명시하는 방법이다.public class Employee implements Person , Identified{public int getId() {return Identified.super...
인터페이스 (1) 인터페이스 서비스 공급자와 자신의 객체가 해당 서비스를 사용할 수 있게 하려는 클래스가 있을 때, 이 두 클래스 사이의 계약을 표현하는 매커니즘* 인터페이스의 모든 메서드는 자동으로 public이 된다.타입변환 상위 인터페이스 타입의 변수는 하위 인터페이스에서 상위인터페이스를 구현한 어떤 클래스의 객체라도 참조할 수 있다.가끔 역으로 슈퍼타입에서 서브타입으로 하는 것도 필요하다. 이럴 때는 변환을 해야한다.IntSequence sequence = ......;DigitSequence digits = (DigitSequence) sequence;System.out.println(digits.rest());여기서 rest()는 IntSequence의 메서드가 아니라 DigitSequence의 메서드다. 따라..
자바 패키지 패키지를 쓰는 이유 패키지는 주로 클래스 이름의 유일성을 보장하려고 사용한다. 서로 다른 패키지에 같은 이름의 클래스를 넣어도 충돌이 일어나지 않는다.*자바에서는 패키지는 중첩되지 않는다 java.util과 java.util.regex 패키지는 서로 관련이 없다.클래스 임포트하기 import 문이 있으면 전체 이름 없이도 클래스를 사용할 수 있다.import java.util.Random; 그러면 코드에서 java.util.Random을 Random으로 사용할 수 있다.*여러 패키지를 임포트하다 보면 클래스가 충돌이 일어날 수 있다.예를들면import java.util.*;import java.sql.*;두 패키지의 클래스들을 임포트하면 둘다 Date클래스가 있기때문에 충돌을 일으킨다. (컴파일오류)이럴..
정적 변수와 정적메서드 정적변수 클래스 안에 있는 변수를 static으로 선언하면 해당 변수는 클래스당 "하나"만 있게 된다.사실 더 적절한 용어는 '클래스 변수' 라고 할 수 있다.정적상수 변경 가능한 정적 변수는 드물지만, 정적 상수는 아주 일반적이다.public static final double PI = 3.14159265358979323846;정적메서드 public class Math{public static double pow(double base , double exponent){...}}Math클래스의 pow메서드는 정적 메서드다. 왜 인스턴스 메서드로 만들지 않았을까?자바에서 기본 타입(8가지)은 클래스가 아니므로 double의 인스턴스 메서드가 될 수 없다.정적메서드를 사용하는 또 다른 이유는 다른 사람이 만..
자바 객체지향프로그래밍 - 객체 생성 클래스 public class Employee{private String name;private double salary;}Employee클래스를 선언하고 그 안의 인스턴스 변수를 만들었다.인스턴스 변수는 객체의 인스턴스가 생성되었을 때 가질 수 있는 상태(변수)들이다. 인스턴스 변수는 보통 private로 선언하는데 이것이 바람직한 이유는 프로그램의 어느 부분이 변수를 변경할 수 있는지 제어하고, 언제든지 내부 표현을 변경할 수 있다는 것이다.메서드는 대부분 public 으로 선언한다. 때로는 헬퍼메서드를 같은 클래스에 속한 다른 메서드에서만 사용하도록 제한하는 private으로 선언한다. 또 클래스 사용자와 관련이 없는 메서드는 특히 세부 구현에 의존할 때 private으로 선언해야한다.this 참조..
자바 객체지향프로그래밍 - 객체 이용 객체지향 프로그래밍간단히 설명하면 프로그램을 만들 때, 상태와 행위로 이루어진 객체들을 만들어서 그 객체들간의 조립, 의사소통을 통해 하나의 프로그램을 만드는 것이다.접근자 메서드와 변경자 메서드 호출 대상 객체를 변경하는 메서드를 변경자, 객체를 변경하지 않는 메서드를 접근자라고 한다.ArrayList 클래스의 add메서드가 변경자의 예다. add를 호출하면 배열리스트 객체가 변경된다.* 이슈는 대부분의 컴퓨터는 CPU가 여러개라서 어떻게 안전하게 동시 접근하느냐다. 이 문제를 해결하는 방법은 접근자 메서드만 제공해서 객체를 변경할 수 없게하는 것인데 여전히 객체 변경이 필요할 때가 많다. 객체 참조C++같은 프로그래밍 언어에서는 변수에 객체를 담을 수 있다. 하지만 자바는 변수에 오직 객체에 대한 참..
자바 기본프로그래밍 (3) 가변인자 메서드를 호출하는 쪽에서 인자 개수를 정하지 않고 사용할 수 있는 메서드가 몇 가지 있다.public static double average(double... values){}이런식으로 ... 을 쓰면 다음과 같이 호출할 수 있다.double avg = average(3, 4.5, 8, 0);4개의 인자가 들어오면 자동적으로 뒤에 적은 values라는 변수안에 배열로 들어가 있다.* values 라고 적어야 하는것은 아니고 자유롭게 변수 이름 지정이 가능하다. 자바 API자바에서는 엄청나게 많은 API들이 준비되어있다.미리 제공하는 API를 이용하여 효율적인 코딩을 하면 된다.뭐 교수님들이 자바 API문서를 보면서 필요한 것을 찾아보고 공부하라고는 하는데 맞는 말이긴하나 정작 교수님들이 직접 사..