Enum - Enum을 사용하여 열거체를 정의할 수 있다 ㅡ> 상수들의 집합 - 상수의 의미를 확실하게 전달 + 프로그램의 안정성 향상 - 선언된 순서에 따라 index값을 가진다 - 상수들은 모두 대문자로 선언해야 한다 - 메서드 사용가능 public static final String MON = "Monday"; public static final String TUE = "Tuesday"; public static final String WED = "Wednesday"; // Enum을 이용하면 특정 상수값을 사용하기 위해 일일이 선언하지 않아도 된다. public enum Day { MON, TUE, WED, THU, FRI, SAT, SUN } // 생성자와 final필드를 추가할 수 있다 // ..
예외처리(Exception) - 오류가 났을 때 try catch, throw를 이용하여 오류를 처리하는 것 - 오류가 발생하면 프로그램이 비정상적으로 종료되지만, 예외처리 추가 시 정상적인 실행상태로 되돌릴 수 있다 - 예외처리를 통해 사용자 입장에서 생각하여 사용자가 할 법한 실수들을 대비 - Exception : 프로그램 실행도중 종료될 수 있는 문제와 연관되어 예외처리를 선택적으로 하거나 꼭 해야하는 클래스들의 최상위 클래스 - Error 클래스 : 프로그램 실행 도중 해결할 수 있는 문제가 아니라 이후 발견되어 처리해야하는 문제들이 연관되어 있는 클래스 예외가 발생하는 순간들 System.out.println(10/0); // ArithmeticException int[] arr = {1,2,3..
인터페이스 모든 기능을 추상화로 정의만 하고 구현은 하지 않은 것 클래스와 인터페이스는 서로 상속받을 수 없다. 인터페이스끼리 상속가능 클래스는 다중 상속이 불가능하지만 인터페이스는 다중 구현이 가능하다 일반 메서드를 사용할 수 없다 필드는 상수 값만 가질 수 있다 implements 키워드를 사용하여 인터페이스를 '상속'이 아닌 '구현'한다. interface A {// 인터페이스 abstract void test1();// 추상 메서드 abstract void test2(); } interface B { void test3(); // 인터페이스에서 abstract 키워드를 생략할 수 있다. void test4(); } class C implements A , B { // 인터페이스는 다중 구현이 가능..
추상화 공통된 특징을 묶어 하나의 클래스로 정의 (공통된 특징을 파악하는것이 중요) 상속으로 사용해야하지만 다중상속 불가능 객체 생성이 불가능 접근제어자, 리턴타입 사이에 abstract라는 키워드를 사용 자식 클래스들이 오버라이딩을 통해 메서드를 구현 abstract class Animal { // 추상 메서드 추상클래스 안에서 선언만 하고 {}대신 ;를 사용 abstract void howl(); } class Cat extends Animal { void howl() { System.out.println("야옹"); } } class Dog extends Animal { void howl() { System.out.println("멍멍"); } } public class Run { public st..
캡슐화 연관된 목적을 가지는 변수, 함수를 하나의 클래스로 묶어 외부에서 쉽게 접근하지 못하도록 은닉하는 것 외부에서 내부 정보에 접근, 변경을 불가능하도록 처리하고 해당 객체가 제공하는 필드와 메서드를 통해 접근이 가능 객체 정보 손상과 오용을 방지하고 데이터가 변경되어도 다른 객체에 영향을 주지 않는다 캡슐화는 접근제어자를 통해 이루어진다 접근제어자 public : 접근의 제한이 없음 protected: 동일한 패키지 내에 존재하거나 상속받은 클래스에서 접근 가능 default : 동일한 패키지 내에서만 접근 가능 / 아무런 명시가 없다면 디폴트값 private : 해당 클래스 내에서만 접근 가능 Getter & Setter 객체를 외부에서 읽고 변경하게 되면 객체의 무결성(변하지 않는 형태)이 깨질..
오버라이딩 부모 클래스에서 상속받은 메서드를 자식 클래스에서 재정의하는 것 오버라이딩하고자 하는 메서드의 이름, 매개변수, 리턴 값이 모두 같아야 한다 필드는 오버라이딩이 불가능하다 상속 상위 클래스의 필드와 메서드를 물려받아 하위 클래스가 가져감 두 개 이상의 클래스를 직접적인 관계를 형성하여 불필요한 필드와 메서드의 선언을 최소화 자식 클래스에서 오버라이딩하는 메서드의 접근제어자는 부모 클래스보다 더 좁게 설정할 수 없다 class Parent { void display() { System.out.println("부모 클래스의 display() 메소드입니다."); } } class Child extends Parent { void display() { System.out.println("자식 클래스의..
오버로딩 같은 이름의 생성자나 메서드가 여러개 있더라도 파라미터의 타입이나 개수가 다르다면 사용 가능하다 같은 기능을 하는 메서드를 하나의 이름으로 사용 가능하다 메서드의 이름을 절약할 수 있다 // 변수명은 다르지만 변수 타입이 같기 때문에 불가능 int add(int a, int b) { return a+b; } int add(int x, int y) { return x+y; } // 변수 타입이 다르기 때문에 사용가능 int add(int a, int b) { return a+b; } int add(long a, long b) { return a+b; }
생성자 클래스 명과 메서드 명이 동일 리턴타입을 정의하지 않음(void포함) 생성자를 선언하지 않으면 자동으로 디폴트 생성자를 생성한다 오버로딩이 가능하다 // 생성자 생략 public class Animal { String name; static int age = 3; Animal(String name){ this.setName(name); } void setName(String name) { this.name=name; } } // 생성자 입력 public class Animal { String name; static int age = 3; Animal(String name){ this.setName(name); } void setName(String name) { this.name=name; } }