본문 바로가기

Java

(54)
[Java] 인터페이스의 본질과 이해 인터페이스란?인터페이스의 역할인터페이스의 인터페이스란 말 그대로 구현한 클래스와 다른 클래스 간의 인터페이스 역할을 한다. 두 클래스 사이에서 인터렉션을 할수 있도록 파이프라인 역할을 하는 것이다.인터페이스는 일종의 추상 클래스이다. 인터페이스는 추상 클래스처럼 추상 메서드는 갖지만, 추상 클래스와 다르게 body가 구현된 일반 메서드와 멤버 변수를 멤버로 가질 수 없다. 오직 추상 메서드와 상수만을 멤버로 가질 수 있어서, 추상 클래스보다 추상화 정도가 높다. 인터페이스 작성인터페이스 작성하는 것은 클래스를 작성하는 것과 같으며, 클래스와 마찬가지로 인터페이스의 접근제어자도 public 또는 default으로 지정할 수 있다. 인터페이스에 추상화된 메서드를 선언하고 클래스에서 구현하는 방식이다.inte..
[Java] 추상 클래스와 메서드 (Abstract) 추상 클래스클래스를 설계도에 비유한다면, 추상 클래스는 큰 틀에서의 규격만 잡아놓은 설계도에 가깝다. 이는 구현부가 작성되지 않은 메서드를 포함할수 있다는 의미이다. 추상 클래스는 상속을 통해서 하위 클래스에서 구현할 수 있다. 추상 클래스는 클래스로서의 역할을 다 못하지만, 새로운 클래스를 작성하는데 있어서 기저가 되는 설계도이다. 예를들면, 기능 차이에 따라 여러 모델의 냉장고가 있더라도 설계도는 거의 동일할 것이다. 이러한 공통적인 부분에 대한 설계도를 그려놓으면, 해당 설계도를 바탕으로 각 모델에 맞게 설계도를 완성 후에 실제 제품을 생상할 수 있다.추상 메서드메서드는 선언부와 구현부로 구현되있고, 추상 메서드는 선언부만 작성한다. 즉, 설계만 해놓고 실제 수행될 내용을 작성하지 않는다. 실제 수..
[Java] 다형성 (Polymorphism) 다형성이란?다형성의 의미다형성(Polymorphism)은 상속과 깊은 관계가 있으며, 하나의 참조변수로 다양한 형태의 타입을 객체를 참조할 수 있도록 한것이다. 정확하게는 상위 클래스 타입의 참조변수로 하위클래스의 인스턴스를 참조할 수 있다는 것이다. 참조에 대한 다형성이 가능한 이유아래의 코드에서 Person 클래스의 자식 클래스 Student이며, PersonStudentTest메서드 구현부를 보면 Person 클래스의 참조 변수 p가 Student의 인스턴스를 참조하는 것이 가능하다. 자식 클래스는 부모 클래스의 멤버를 모두 상속받아 접근이 가능하므로 참조가 가능하다. 즉, 참조변수는 참조하는데 문제가 없으면 참조가 가능하다.class Person { String name; int..
[Java] Modifier (Access Modifier와 Encapsulation) Modifier란?제어자(modifier)는 크게 접근 제어자와 그 외의 제어자로 나뉜다. 제어자는 클래스, 변수, 메서드의 선언부에 사용되어, 대상의 기능을 제어한다. 하나의 대상에 여러 제어자를 사용할 수도 있다. 접근 제어자에는 public, protected, default, private가 있으며, 그 외의 제어자는 static, final, abstract, native, transient, synchronized 등이 있다.접근 제어자 (Access Modifier)접근 제어자의 종류와 역할접근 제어자(access modifier)는 멤버변수, 클래스, 메서드, 생성자에 사용되어, 적용된 대상에 접근을 제어하는 역할을 한다.접근제어자에는 다음과 같은 종류가 있다.private: 같은 클래스 ..
[Java] Package와 Import Package란?패키지(Package)는 서로 관련된 여러 클래스와 인터페이스를 묶은 그룹이다. 클래스는 패키지 하위에 저장되고, 실제 클래스명은 패키지명까지 포함한 것이다. 예시로, String 클래스는 java.lang 패키지에 속하며, 실제 이름은 java.lang.String이다. Package와 File SystemJava는 파일 시스템의 디렉토리와 파일을 사용하여 패키지와 클래스 및 인터페이스를 조직화하고 관리한다. 패키지는 디렉토리와 맵핑되고 클래스와 인터페이스는 파일과 맵핑된다. String 클래스 파일은 java 디렉터리의 lang 서브 디렉터리 내에 저장된 파일이다. 이로써, 동일한 이름을 가진 클래스일지라도 다른 패키지에 존재하는 것이 가능하여 이름 충돌을 방지한다. 그리하여 다른 개..
[Java] 오버라이딩 (Overriding) 오버라이딩의 역할Override는 말그 대로 메서드 위에 올라타는 것이며, 상위 클래스의 메서드를 하위 클래스의 맞게 변경해야하는 경우에 메서드를 오버라이딩(Overiding)한다. Overloading과 용어는 비슷하지만, Overloading은 없던 메서드를 새로 구현한 것이고, Overriding은 상속받은 메서드의 구현부를 변경하는 것이다.  아래의 Point 클래스를 상속받은 Point3D 클래스에서 getLocation 메서드를 해당 클래스에 맞게 인스턴스 변수 z의 출력이 필요하다. 그리하여 오버라이딩을하여 Point3D 클래스에 맞게 메서드 구현부를 변경하였다. 메서드 선언부(메서드명, 매개변수, 반환 타입)는 오버라이드할 메서드와 동일해야한다.class Point { int x;..
[Java] 상속 (Inheritance) 클래스간의 상속 관계상속의 집합 관계와 타입 선언클래스는 멤버 (멤버 변수, 메서드)의 집합이다. 자식 클래스는 부모 클래스의 모든 멤버를 상속(Inheritance) 받는다. 그리므로 부모 클래스는 자식 클래스의 집합 관계로 표현될 수 있다.  위의 집합 관계가 형성되기 때문에, 자식 클래스(Child)는 부모 클래스(Parent) 타입으로 선언할 수 있다. 정확히는 자식 클래스는 부모 클래스에게 모든 멤버를 상속 받았기 때문에, 자식 클래스가 부모 클래스를 포함한 더 큰 범위의 타입이다. 그리하여 아래의 코드 중 Parent parent = new Child(1, 2, 3);에서 자식 클래스(Child)의 인스턴스를 생성하는데, 부모 타입(Parent)으로 선언이 가능하다. 이는 인스턴스의 실제 C..
[Java] 인스턴스 메서드 호출 및 실행 과정 - Bytecode 실행과 Runtime Data Area의 변화 (3) 2. Instance 생성과 Constructor 호출 및 실행 과정 내용에 이어서 인스턴스 메서드(Instance Method) 호출 및 실행 과정을 다룰것이다. [Java] 2. Instance 생성과 Constructor 호출 및 실행 과정 - Bytecode 실행과 Runtime Data Area의 변화앞선, 1. 클래스 파일(.class)의 메모리 로드 과정 내용에 이어서 인스턴스(Instance) 생성과 생성자(Constructor) 호출 및 실행 과정을 다룰것이다. 생성자에 대한 내용은 Constructor에 설명되어있다. [Java]devjohnpark.tistory.com 인스턴스 참조 값과 인자 값 로드인스턴스 참조 값 로드이전에 invokespecial #9 명령어를 실행하여, 생성자..