java.lang 패키지 자바 프로그래밍의 가장 기본이 되는 클래스들을 포함하고 있다. 따라서 import 문 없이도 사용할 수 있게 되었다. 가령) String, System, Object들이 있다. Object 모든 클래스의 최고 조상이다. 메서드 clone() : 객체 자신의 복사본을 반환 자신을 복제하여 새로운 인스턴스를 생성한다. equals(Object obj) : 객체 자신과 객체 obj가 같은 객체인지 알려준다. (인스턴스 비교, 값비교가 아니다.) 문자열의 경우에는 String에서 equal을 오버라이딩하여 값비교로 바꾸었기 때문에 가능한 것이다. finalize() : 가비지 컬렉터에 의해 삭제될 때 불리는 호출자 getClass() : 클래스 인스턴스를 반환 hashCode() : 객..
내부 클래스 클래스 내부에 선언된다는 특징 이외에는 일반 클래스와 동일하다. 클래스 안에 다른 클래스를 선언하는 이유는 두 클래스가 서로 긴밀한 관계에 있기 때문이다. 한 클래스를 다른 클래스의 내부 클래스로 선언하면 두 클래스의 맴버들 간에 서로 쉽게 접근할 수 있다는 장점이 있고, 외부에는 불필요한 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다는 장점이 있다. 장점 내부 클래스에서 외부 클래스의 맴버들을 쉽게 접근할 수 있다. 코드의 복잡성을 줄 일 수 있다.(캡슐화) class A{ class B{ } } 내부 클래스의 종류는 변수의 선언위치에 따른 종류와 같다. 선언 위치에 따라 인스턴스 변수, 클래스변수, 지역변수로 구분된다. 인스턴스 클래스 : 외부 클래스의 맴버 변수 선언 위치에 선언되어..
인터페이스(interface) 인터페이는 일종의 추상 클래스이다. 추상화 정도가 높아서 일반 메서드나, 맴버변수를 구성원으로 가질 수 없다. (abstract는 가질 수 있다.) 오직 추상 메서드와 상수만을 맴버로 가질 수 있다. 다른 클래스 작성을 목적으로 작성된다.interface Temp{ public static final TEMP_MEMBER_VARIABLE = ??; public abstract tempMethod(TempType temp); } 제약 사항 모든 맴버 변수는 public static final 로 고정된다. 단, 이를 생략 할 수 있다. (어차피 맴버변수에 모두 접근해야하고 인스턴스를 만들 수는 없으므로 이렇게 쓰는 게 맞다.) 모든 메서드는 public abstract 이어야..
다형성이란 여러 가지 형태를 가질 수 있는 능력 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현 즉, 조상클래스의 타입 참조변수로 자손 클래스의 인스턴스를 참조할 수 있도록 하였다. 부모 클래스의 레퍼런스 변수는 자식 클래스의 타입 변수를 가져올 수 있다. 그러나, 부모 클래스의 레퍼런스 변수는 부모 클래스 타입으로 되어있기 때문에 실제 인스턴스가 자식꺼라고 하여도 자식의 맴버 변수나 메서드에 접근할 수 없다. 다만, 부모 클래스의 맴버는 사용가능하다. 즉, 둘 다 같은 타입의 인스턴스지만 참조변수의 타입에 따라 사용할 수 있는 맴버의 개수가 달라진다. 그런데, 반대는 불가능하다. 자식 클래스 레퍼런스에 부모 클래스의 인스턴스를 넣을 수 없다. 이 경우에는..
추상클래스 추상클래스는 미완성된 설계도로 비유할 수 있다. 클래스가 미완성이라는 것은 맴버의 개수에 관계된 것이 아니라, 미완성 메서드(추상 메서드)를 포함하고 있다는 것이다. 미완성이기 때문에 인스턴스를 생성할 수 없다. 오직 상속을 통해 자손클래스에 의해서만 완성될 수 있다. 클래스의 선언부에 abstract라는 키워드를 달아 미완성 메서드가 있다는 사실을 알려주도록 하자 미완성 메서드 이외에는 전부 일반 클래스와 동일하다는 특징이 있다. - 추상 메서드를 호출이 불가능한 것은 아니다. 추상 클래스라고 해서, 모든 메서드들이 추상 메서드 인 것은 아니다. 추상 메서드 추상 메서드는 선언부만 작성하고, 구현부는 남겨둔 것이다. 즉, 설계만 해놓고 실제 수행될 내용은 작성하지 않았기 때문에 미완성 메서드..
제어자(modifier) 제어자 제어자는 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 제어자의 종류는 크게 접근 제어자와 그 외의 제어자로 나눌 수 있다. 접근 제어자 : public, protected, default, private 그 외 : static, final, abstract , native, transient, synchronized , volatile, stricfp 하나의 대상에 대해서 여러 제어자를 조합하여 사용하는 것이 가능하다. 단, 접근 제어자는 4가지 중에 하나만 사용가능하다. static - 클래스의, 공통적인 클래스가 메모리에 로드될 때 생성되므로 인스턴스와 상관이 없다. 메서드 : static 메서드는 인스턴스 맴버들을 직접 사용할 수 없..
패키지(package) 패키지란 클래스(or 인터페이스)의 묶음이다. 같은 이름의 클래스 일지라도 서로 다른 패키지에 존재하는 것이 가능하다. 가령 java.lang.String 이라는 패키지를 import한다면, class는 String이고, String은 java.lang이라는 물리적인 폴더에 있는 것이다. 즉, 패키지는 물리적인 하나의 폴더인 것이다. 정리 하나의 소스파일에는 첫 번째 문장으로 단 한 번의 패키지 선언만을 허용한다.(package 패키지명) 모든 클래스는 반드시 하나의 패키지에 속해야 한다. 패키지는 점(.)을 구분자로 하여 계층구조로 구성할 수 있다. 패키지는 물리적으로 클래스 파일(.class)을 포함하는 하나의 디렉토리이다. 패키지 명은 클래스와 구분하기 쉽게하기 위해서 소문자..
상속 상속의 정의와 장점 상속이란 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 적은 양의 코드로 새로운 클래스를 작성할 수 있고, 코드를 공통적으로 관리할 수 있어 관리 및 추가 , 변경에 용이하다. 코드의 재사용성을 높이고, 중복을 제거한다. 프로그램의 생산성과 유지보수에 크기 기여 작성 방법 : 새로 작성할 클래스 이름 extends 상속받고자하는 클래스이름 상속해주는 클래스 : 조상 클래스(상위, 기반(base)) 상속받는 클래스 : 자손 클래스(하위, 파생) 화살표는 자손이 부모를 향산다 (상복받았기 때문) 자손 클래스는 부모 클래스의 모든 맴버를 상속받기 때문에 자손 클래스가 더 큰 포함관계를 갖는다고 볼 수 있다. 조상 클래스가 변경되면 자손 클래스는 자동적으로 영향 받지만, ..