(cmd + z 또는 Ctrl + z) 실행취소(undo)의 반대되는 단축키

이미지
코드를 작성하다보면 실행취소 단축키 cmd + z (맥) / ctrl + z (윈도우)를 자주 사용하게 된다. 실행취소를 하는도중 잘못 눌러 실행취소를 더 하게 되는 경우가 발생한다. 이때 실행취소(undo) 한것을 이전으로 되돌리는 단축키가 있다. cmd + shift + z (맥) / ctrl + shift + z (윈도우) 실행취소된 것을 다시 실행 시켜준다. ( undo => redo )

[JAVA] enum 클래스

enum을 사용하는 이유를 정리하면 아래와 같다. 1. 열거체를 비교할 때 실제 값과 타입을 모두 체크한다. 2. 열거체의 상수값이 재정의 되더라도 다시 컴파일할 필요가 없다. 3. 코드가 단순해진다. 4. 인스턴스 생성과 상속을 방지한다. 5. 키워드 enum을 사용하기 때문에 구현의 의도가 열거임을 분명하게 나타낼 수 있다. 정의 및 사용 방법 enum 키워드를 사용하여 열거체를 정의한다. //문법 enum 열거체이름 { 상수1이름 , 상수2이름 , ... } //예제 enum Fruit { APPLE , BANANA , ORANGE , WATERMELON }   열거체를 사용 방법 //문법 열거체이름 . 상수이름 //예제 Fruit . APPLE 상숫 정의 및 추가 열거체의 첫 번째 상수 값은 0부터 설정되며 그 이후로 바로 앞의 상수값 보다 1만큼 증가되며 설정된다. 추가적으로 불규칙한 값을 상수값으로 설정하고 싶으면 상수의 이름 옆에 괄호(())을 추가하고 그 안에 원하는 상수값을 명시할 수 있다. 이때 주의할 점은 불규칙한 특정 값을 저장할 수 있는 인스턴스 변수와 생성자를 다음과 같이 별도로 추가해야만 한다. //예시 enum Fruit { APPLE ( 30 ), BANANA ( 10 ), ORANGE ( 22 ), WATERMELON ( 5 ); private final int value ; Fruit ( int value ) { this. value = value ; } public int getValue () { return value ; } } 대표적인 Enum 메소드 static E values()  해당 열거체의 모든 상수를 저장한 배열을 생성하여 반환함. static E valueOf(String name)   전달된 문자열과 일치하는 해당 열거체의 상수를 반환함. protected void finalize()   해당 Enum 클래스가 final 메소

[JAVA] 제네릭(Generic)

JAVA 제네릭(Generic) 제네릭은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다. 제네릭을 사용하는 이유는 타입이 안전하다는 장점과 코드의 중복을 제거한다는 이유에서 사용한다. 제네릭(Generic) 장점 1. 잘못된 타입이 들어올 수 있는 문제를 컴파일 단계에서 방지할 수 있다. 2. 코드의 재사용성이 높아진다. 제네릭(Generic)에서 사용되는 타입인자 타입인자 설명 <T> Type <E> Element <K> Key <N> Number <V> Value <R> Result 제네릭(Generic) 사용방법 <> 사이에다가 참조형 데이터타입을 작성해준다. 기본형 데이터타입은 작성이 불가하다. (int, char..) 하지만 이러한 기본형 데이터타입도 사용이 가능하게하는 방법이 있다. 그것은 wrapper클래스이다. 자바에서는 기본형 데이터타입을 객체처럼 사용할 수 있도록하는 객체들을 제공하는데 바로 그러한 것을 wrapper 클래스이다.  int의 wrapper 클래스는 Integer, double의 wrapper 클래스는 Double , char는  Character 등이있다. 제네릭 클래스 class ExClassGeneric < T > { private T t ; public void setT ( T t ) { this. t = t ; } public T getT () { return t ; } } 클래스를 설계할 때 구체적인 타입을 명시하지 않고 타입 파라미터로 작성해두었다가 해당 클래스가 사용되어질 때 ExClassGeneric<String> exGeneric = new ExClassGeneric<>(); 이런식으로 타입을 지정해 줄 수 있다. 제네릭 인터페이스 interface ExInterfaceGeneric

[JAVA] 접근 제어자(access modifier)

이미지
JAVA 접근 제어자(access modifier) 접근제어자를 사용하는 이유는 사용자가 의도하지 않은 방법으로 내부적인 클래스의 상태를 변경하는것을 막고자하기 위함이다.        같은 클래스  같은 패키지   다른 패키지  모든 클래스                              (상속)         (서브 클래스) ================================================ private      O              X                X ================================================ default      O              O                X ================================================ protected   O              O               O ================================================ public       O               O               O             O ================================================ 접근 제어자가 사용될 수 있는 곳 - 클래스, 멤버변수, 메서드, 생성자 private : 같은 클래스 내에서만 접근이 가능하다.(상속받아도 접근 불가) default : 같은 패키지 내에서만 접근이 가능하다. (접근제어자를 미작성하면 default로 접근제어자 자동설정) protected : 같은 패키지 내에서 접근가능, 다른 패키지는 상속시에만 접근가능 public : 접근 제한이 전혀 없다. 접근 범위가 넓은 쪽에서 좁은 쪽의 순으로 왼쪽부터 나열하면 다음과 같다. public > protected > (default) > private   대상         ㅣ       사용가능한 접근 제어자 ===============

[Java] 예외처리(try~catch, throws, throw)

JAVA 예외처리 예외처리  목적 : 프로그램의 비정상 종료를 방지하고 정상상태를 유지할 수 있게 만든다. (견고한 프로그램)  정의 : 사전에 예상되는 에러를 대비하는 코드를 만든다. ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ ##예외처리(예외복구) try ~ catch 절 기본적인 예외처리 try ~ catch 사용방법 try { //예외의 발생이 예상되는 로직(코드) } catch (Exception e) { //인자로 예외클래스 인스턴스 즉 에러상황을 담고있는 객체를 전달 //에러 처리 //예외가 발생했을 때 실행되는 로직 } finally { //필수는 아니며 필요시에만 선언                //정상처리하던 에러처리하던 무조건 실행해야되는것                //예외여부와 관계없이 실행되는 로직 } ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 에러처리(확인)방법 e.getMessage() // 간단하게 에러 확인 e.toString() // 조금더 자세하게 에러확인 e.printStackTrace() // 아주 자세하게 에러확인 (몇번째줄에서 에러발생했는지 확인) ex) 10을 0으로 나누어서 에러가 발생했을때 e.getMessage() //  / by zero e.toString() //  java.lang.ArithmeticException : / by zero e.printStackTrace() //  java.lang.ArithmeticException : / by zero                                          at Access.divide( Access.java:16 )                                          at Access.main( Access.java:31 ) * try에서 에러가 발생하여 catch절로 이동하여

[JAVA] 인터페이스(interface)

JAVA 인터페이스(interface) 약속되어있는 선언부의 형식을 그대로 상속받아 메서드들을 반드시 구현하도록 강제한다. 선언시 interface키워드를 사용한다. 인터페이스도 일종의 추상클래스이다. 오직 추상메서드와 상수만을 구성원으로 가질 수 있다. 모든 멤머변수는 public static final이어야 하며 이를 생략할 수 있다. 모든 메서드는 public abstract이어야 하며 이를 생략할 수 있다. 인터페이스는 public으로 정의해야하며 멤버도 반드시 public이다. *** 인터페이스에 선언된 모든 메소드는 public이다       인터페이스에 선언된 모든 변수는 public이다(상수 final)  => 변수 (추상클래스:멤버변수 , 인터페이스 : 상수형변수) 인터페이스 내부에 상수용 변수 선언이 가능하다. 그리고 그변수는 그냥 작성하여도    static final로   자동선언된다. 상속 (인터페이스는 인터페이스로부터만 상속받을 수 있다.) 인터페이스 ==> 인터페이스                  (extends)  인터페이스 ==> 클래스                  (implements) 클래스 ==> 인터페이스                  (error) 인터페이스는 클래스를 상속받을 수 없다. 인터페이스를 최종적으로 구현하는것은 마지막으로 상속받는 class 내부에서 구현해야한다. 여러개 클래스를 묶어서 인터페이스로 관리(서로 다른 클래스들에게 관계를 맺어준다) 추상클래스의 일종(추상클래스 단점을 보완) 미완성된 클래스이므로  자신이 메모리 할당을 할 수 없다 (구현한 클래스를 통해서 메모리 할당가능) 추상 메서드는 abstract로만 선언가능 (자바 8에서는 default키워드를 이용해서 일반 메소드 구현이 가능해졌다.) ================================ interface A interface B class C implements A,B ==> 다중상속