본문 바로가기

Java/JAVA

(44)
상속 (1) 슈퍼클래스와 서브클래스 Employee 클래스의 몇 가지 기능을 보유하면서 관리자가 직원과 어떻게 다른지 명시하는 클래스 작성public class Manager extends Employee{추가된 필드추가된 메서드 또는 오버라이딩 메서드}* 슈퍼클래스는 부모 클래스고 서브클래스는 부모클래스의 기능을 상속받는 자식클래스다.* 단, 슈퍼클래스라고 더 우월하지 않다는 점이다. 오히려 서브클래스가 슈퍼클래스보다 많은 기능이 있다.메서드 오버라이딩 public class Manager extends Employee{...public double getSalary(){ // 슈퍼클래스의 메서드를 오버라이드한다.return super.getSalary() + bonus;}}* super는 this와 달리 객체에 ..
람다표현식 (2) 람다표현식 처리 람다를 사용하는 핵심 목적은 지연 실행이다.어떤 코드를 당장 사용하고 싶으면 람다를 사용할 필요가 없다.* 별도의 스레드에서 코드 실행* 코드를 여러번 실행* 알고리즘의 올바른 지점에서 코드 실행* 어떤 일이 일어날 때 코드 실행* 필요할때만 코드 실행람다를 받으려면 함수형 인터페이스를 선택or구현 해야한다.public static void repeat(int n, Runnable action){for(int i=0;i
람다표현식 (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 참조..