목록자바 (33)
컴공생의 다이어리
인터페이스(interface)의 상속 인터페이스 사이에서도 상속을 사용할 수 있다. 이때도 클래스 상속에서 사용했던 extends 키워드를 사용하면 된다. 인터페이스는 다중 상속이 가능하고 구현 코드의 상속이 아니므로 타입 상속이라고 한다. 아래의 MyInterface 인터페이스는 X와 Y라는 인터페이스가 있을 때, 두 인터페이스를 상속받은 인터페이스이다. public interface X { void x(); } public interface Y { void y(); } public interface MyInterface extends X, Y{ void myMethod(); } 출처 : 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online
인터페이스(interface) 인터페이스란 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스를 의미한다. 자바의 다형성을 극대화하여 개발코드 수정을 줄이고 프로그램 유지보수성을 높이기 위해 인터페이스를 사용한다. 인터페이스는 interface 키워드를 통해 선언할 수 있으며 implements 키워드를 통해 일반 클래스에서 인터페이스를 구현할 수 있다. public interface Predator { boolean chasePrey(Prey p); void eatPrey(Prey p); } public class Lion implements Predator { @Override public boolean chasePrey(Prey..
추상 클래스(abstract class) 추상 클래스란 구현 코드 없이 메서드의 선언만 있는 추상 메서드(abstract method)를 포함한 클래스를 말한다. 여기서 메서드의 선언만 있다는 말은 아래 코드에서 첫번째 처럼 생긴 것을 말한다. int add(int x, int y); // 선언 int add(int x, int y){ } // 구현부가 있음, 추상 메서드 아님 또한 추상 클래스는 abstract라는 예약어를 사용한다. 추상 클래스의 경우 new할 수 없다. 즉 인스턴스 화 할 수 없다는 것이다. 추상 클래스 구현 메서드에 구현 코드가 없으면 abstract로 선언하며 abstract로 선언된 메서드를 가진 클래스는 abstract로 선언해야 한다. 또한 주의해야 할 점은, 모든 메서드가..
instanceof 연산자 instanceof 연산자는 원래 인스턴스의 형이 맞는지 여부를 체크하는 키워드이다. 맞으면 true 아니면 false를 반환한다. Syntax는 아래와 같다. object가 type이거나 type을 상속받는 클래스라면 true를 리턴하고 아니면 false를 리턴한다. object instanceOf type 아래와 같은 코드처럼 instanceof 연산자를 활용할 수 있다. parent의 경우 Parent 클래스이므로 true를 반환한다. child의 경우 Parent로부터 상속받은 클래스인 Child 클래스이므로 true를 반환한다. 하지만 parent의 경우 Parent 클래스인데 Child클래스로 비교하니 false를 반환한다. 자식은 자식이지 부모클래스가 아니기 때문이..
캐스팅(Casting)이란? 캐스팅이란 타입을 변환하는 것을 말하며 형변환이라고도 한다. 자바의 상속 관계에 있는 부모와 자식 클래스 간에는 서로 간의 형변환이 가능하다. 업캐스팅(Upcasting) 업캐스팅이란 자식 클래스의 객체가 부모 클래스 타입으로 형변환 되는 것을 말한다. 아래 코드에서 부모 클래스는 Person, 자식 클래스는 Student이다. 아래 코드에서 Person p = s; 부분이 업캐스팅한 부분이다. p가 Student 객체를 가리키지만, p는 Person 타입이기 때문에 Person 클래스의 멤버에만 접근이 가능하다. 그렇기 때문에 p.check에서 컴파일 타임 에러가 발생한다. class Person{ String name; Person(String name){ this.nam..
클래스 상속 클래스 상속은 새로운 클래스를 정의 할 때 이미 구현된 클래스를 상속받아서 속성이나 기능을 확장하여 클래스를 구현하는 것을 말한다. 이미 구현된 클래스보다 더 구체적인 기능을 가진 클래스를 구현해야 할 때 기존 클래스를 상속한다. 상속하는 클래스 : 상위 클래스, parent class, base class, super class 상속받는 클래스 : 하위 클래스, child class, derived class, subclass 상속하는 클래스가 A이고 상속받는 클래스가 B일때, 아래와 같이 extends를 사용해서 상속을 하면 된다. class B extends A { } * 주의 사항 * extends 키워드 뒤에는 단 하나의 클래스만 올 수 있음 상속을 구현하는 경우 상위 클래스는 하위..
ArrayList 기존의 배열 선언과 사용 방식은 배열의 길이를 정하고 요소의 개수가 배열의 길이보다 커지면 배열을 재할당하고 복사해야 했다. 배열의 요소를 추가하거나 삭제하면 다른 요소들의 이동에 대한 구현을 해야했다. 하지만 java.util 패키지에서 제공되는 ArrayList를 사용하면 객체 배열을 좀 더 효율적으로 관리할 수 있다. ArrayList의 사용법 ▶ 생성 ArrayList를 사용하려면 아래와 같이 먼저 ArrayList 객체를 만들어야 한다. ArrayList arr = new ArrayList(); ▶ 추가 : boolean add(E e) 요소 하나를 배열에 추가하려면 add 메소드를 사용한다. add는 단순히 배열 뒤에 데이터를 더하기 때문에 빠르다. arr.add(10); a..
static 변수 만일 여러 인스턴스가 공유하는 기준 값이 필요한 경우 공통적으로 사용할 수 있는 변수가 필요하다. 이럴때, static 변수를 사용하면 된다. static 변수는 인스턴스가 생성될 때 만들어지는 변수가 아니라, 처음 프로그램이 메모리에 로딩될 때 메모리를 할당된다. 따라서 인스턴스 생성과 상관 없이 사용 가능하므로 클래스 이름으로 직접 참조 가능하다. public class Student{ public static int studentCode = 1000;// 인스턴스들이 공유하는 변수 private String name; private int score; public void setName(String name){ this.name = name; } public void setScor..
오버로딩(Overloading)과 오버라이딩(Overriding) ▶ 오버로딩(Overloading) 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의하는 것을 오버로딩이라고 한다. 아래는 생성자 오버로딩한 것이다. public class Info{ public String id; public String pw; public String name; public Info(){} public Info(String id, String pw){ this.id = id; this.pw = pw; } public Info(String name){ this.name = name; } } ▶ 오버라이딩(Overriding) ..
클래스(class)란? 클래스는 유사한 특징을 지닌 객체들의 속성과 동작을 묶어 놓은 집합체이다. 따라서 클래스는 객체의 청사진(blueprint)이다. 예를 들어 학생이라는 클래스를 만든다면 속성으로 이름, 학번, 전공, 학년을 속성으로 둘 수 있다. 아래는 지금 말한 학생에 대한 속성을 클래스로 만든 것이다. public class Student{ String name;//이름 int studentNumber;//학번 String major;//전공 int grade;//학년 } 객체지향 프로그래밍을 할 때 - 객체를 정의 - 각 객체의 속성을 멤버 변수로, 역할을 메서드로 구현 - 각 객체간의 협력을 구현 https://m.blog.naver.com/highkrs/220201921836 [Java ..