타입을 구체적으로 지정하는 것이 아니라, 추후에 지정할 수 있도록 일반화해두는 것 작성한 클래스 또는 메서드의 코드가 특정 데이터 타입에 얽매이지 않게 해 둘 때 사용한다. 제네릭 클래스 하나의 클래스로 모든 타입의 데이터를 저장할 수 있는 인스턴스를 만들 수 있다 제네릭 클래스 생성 * static은 사용불가하니 참고 class Basket { // 제네릭 미사용시 타입별로 모두 만들어야 한다 (String, Integer, ...) private String item; Basket(String item) { this.item = item; } public String getItem() { return item; } public void setItem(String item) { this.item = i..
서로 연관된 상수들의 집합 여러 상수들을 보다 편리하게 선언하고 관리할 수 있게 하며, 상수 명의 중복을 피하고, 타입에 대한 안정성을 보장 변경되지 않는 한정적인 데이터들을 효과적으로 관리할 수 있다 관례적으로 상수명은 대문자로 작성 switch문 사용가능 기본 구조 enum 열거형이름 {상수명1, 상수명2, 상수명3, ...} switch public class Main { public static void main(String[] args) { switch (Seasons.SPRING) { case SPRING: System.out.println("봄입니다"); break; case SUMMER: System.out.println("여름입니다"); break; case FALL: System.out..
기존 클래스들의 공통적인 요소들을 뽑아 상위 클래스를 만들어 내는 것 abstract 제어자 주로 클래스와 메서드를 형용하는 키워드 클래스 앞에 붙은 경우 : 추상 클래스 메서드 앞에 붙은 경우 : 추상 메서드 어떤 클래스에 추상 메서드가 포함되어있는 경우 해당 클래스는 자동으로 추상 클래스가 된다 미완성이라는 의미 객체 생성이 불가 abstract class AbstractExample { // 추상 메서드가 최소 하나 이상 포함돼있는 추상 클래스 abstract void start(); // 메서드 바디가 없는 추상메서드 } AbstractExample abstractExample = new AbstractExample(); // 에러발생. 추상 클래스 메서드 시그니처만 존재하고 바디가 선언되지 않은..
하나의 객체가 여러 가지 형태를 가질 수 있는 성질 다형성 상위 클래스 타입의 참조변수를 통해서 하위 클래스의 객체를 참조할 수 있도록 허용한 것 class Friend { public void friendInfo() { System.out.println("나는 당신의 친구입니다."); } } class BoyFriend extends Friend { public void friendInfo() { System.out.println("나는 당신의 남자친구입니다."); } } class GirlFriend extends Friend { public void friendInfo() { System.out.println("나는 당신의 여자친구입니다."); } } public class FriendTest { ..
특정 객체 안에 관련된 속성과 기능을 하나의 캡슐로 만들어 데이터를 외부로부터 보호하는 것 캡슐화의 목적 데이터 보호 내부적으로만 사용되는 데이터에 대한 불필요한 외부 노출 방지 패키지 (package) 특정한 목적을 공유하는 클래스와 인터페이스의 묶음 클래스들을 그룹 단위로 묶어 효과적으로 관리하게 위해 사용 Import문을 통해 접근하거나 (.)을 사용하여 접근 우리가 컴퓨터를 사용할 때 폴더를 만들어 그 폴더와 관련된 파일들을 관리하는 것과 같다 쉽게 말해 폴더를 만들어 자바 파일들을 모아 놓은 것 접근 제어자 제어자 (Modifier) 클래스, 필드, 메서드, 생성자 등에 부가적인 의미를 부여하는 키워드 접근 제어자와 기타 제어자로 구분 접근 제어자 : public, protected, (defa..
기존의 클래스를 재활용하여 새로운 클래스를 작성하는 자바의 문법 요소 상속 두 클래스를 상위 클래스와 하위 클래스로 나누어 상위 클래스의 멤버(필드, 메서드. 이너 클래스)를 하위 클래스와 공유하는 것. 하위 클래스의 멤버 개수는 항상 상위 클래스와 같거나 많다. 상위 클래스를 연장하여 만든 클래스에 새로운 기능을 추가하여 사용할 수 있다 상속을 통해 코드를 재사용하여 코드의 중복을 제거할 수 있다 다형적 표현이 가능 단일 상속만 가능 ( 여러 클래스를 상속받을 수 없음 ) class Person { String name; int age; void learn(){ System.out.println("공부를 합니다."); }; void walk(){ System.out.println("걷습니다."); };..
지역 내부 클래스는 클래스의 멤버가 아닌 Method 내에서 정의되는 클래스이다. 지역 변수와 유사하게 메서드 내부에서만 사용 가능하다 -> 일반적으로 메서드 안에서 선언 후 바로 객체를 생성해서 사용한다 public class Main { public static void main(String[] args) { Outer outer = new Outer(); outer.test(); } } class Outer { int num = 5; void test() { int num2 = 6; class LocalInClass { // 지역 내부 클래스 void getPrint() { System.out.println(num); System.out.println(num2); } } LocalInClass lo..
인스턴스 내부 클래스와 정적 내부 클래스를 합쳐서 부른다 객체 내부에 멤버의 형태로 존재하며, 외부 클래스의 모든 접근 지정자의 멤버에 접근할 수 있다. 인스턴스 내부 클래스 객체 내부에 멤버의 형태로 존재하며, 외부 클래스의 모든 접근 지정자의 멤버에 접근할 수 있다. class Outer { private int num = 1; // 외부 클래스 인스턴스 변수 private static int sNum = 2; // 외부 클래스 정적 변수 private InClass inClass; // 내부 클래스 자료형 변수 선언 public Outer() { inClass = new InClass(); // 외부 클래스 생성자 } class InClass { // 인스턴스 내부 클래스 int inNum = 10..
클래스 내에 선언된 클래스 외부 클래스와 내부 클래스가 서로 연관되어 있을 때 사용한다. 장점 내부 클래스를 사용하면 외부 클래스의 멤버들에 쉽게 접근할 수 있다 코드가 간결해진다 외부적으로 불필요한 데이터를 감출 수 있어 캡슐화에 유용 내부 클래스의 종류 class Outer { // 외부 클래스 class Inner { // 인스턴스 내부 클래스 } static class StaticInner { // 정적 내부 클래스 } void run() { class LocalInner { // 지역 내부 클래스 } } } 종류 선언 위치 사용 가능한 변수 인스턴스 내부 클래스(instance inner class) 외부 클래스의 멤버변수 선언위치에 선언(멤버 내부 클래스) 외부 인스턴스 변수, 외부 전역 변수..