목록Java (40)
컴공생의 다이어리
Iterator 반복자 Iterator는 자바의 컬렉션 프레임워크에서 컬렉션에 저장되어 있는 요소들을 읽어오는 방법을 표준화 하였는데 그 중 하나가 Iterator이다. Iterator의 주요 멤버 ▶ boolean hasNext() : 이후에 요소가 더 있는지를 체크하는 메서드, 요소가 있다면 true를 반환 ▶ T next() : 다음에 있는 요소를 반환 ▶ remove() : next()로 읽어온 요소를 삭제 메소드의 호출 순서는 hasNext() -> next() -> remove()이다. Iterator 사용법 LinkedList lnkList = new LinkedList(); lnkList.add(4); lnkList.add(2); lnkList.add(3); lnkList.add(1); /..
제네릭(Generic) 제네릭은 클래스에서 사용하는 변수의 자료형이 여러개 일수 있고, 그 기능(메서드)은 동일한 경우 클래스의 자료형을 특정하지 않고 나중에 해당 클래스를 사용할 때 지정할 수 있도록 선언한다. 제네릭의 장점 1. 제네릭을 사용하면 잘못된 타입이 들어올 수 있는 것을 컴파일 단계에서 방지 2. 클래스 외부에서 타입을 지정해주기 때문에 따로 타입을 체크하고 변환해줄 필요가 없음(즉, 관리하기가 편함) 3. 비슷한 기능을 지원하는 경우 코드의 재사용성이 높아짐 보통 제네릭은 위의 표의 타입들이 많이 사용된다. 무조건 위처럼 사용해야 하는 것은 아니다. 하지만 암묵적인 규칙이기 때문에 저런 형식으로 사용해주는 것이 좋다. 제네릭의 선언 및 생성 자바에서 제네릭은 클래스와 메서드에만 아래와 같..
String, StringBuffer, StringBuilder Java에서 문자열을 다루는 대표적인 클래스로 String, StringBuffer, StringBuilder가 있다. String String 클래스는 StringBuffer, StringBuilder 클래스와 다르게 한번 생성되면 할당된 메모리 공간이 변하지 않는다는 불변의 속성을 가지고 있다. String str = "hello"; // String str = new String("hello"); str = str + " world"; // [ hello world ] 위의 예제는 str에 처음 "hello" 값을 넣고 두번째 문장에서 str이 "hello world"라는 값을 가지고 있는 새로운 메모리 여역을 가리키게 변경되고 처음 ..
문자열(String) 비교 자바에서는 문자열을 비교할 때, 상황에 맞추어 ==과 equals()를 구분해서 사용해야 한다. 흔히 c/c++, python에서 문자열을 비교하고자 할 때, ==을 사용하지만 java에서의 ==은 주소의 값을 비교한다. 그렇기 때문에 내용 자체를 비교하고자 한다면 equals()를 사용하면 된다. == : 주소의 값 비교 equals() : 내용 자체를 비교 public class EqualsTest{ public static void main(String[] args){ String a = "JAVA" String b = "JAVA" String c = new String("JAVA"); String d = new String("JAVA"); System.out.printl..
인터페이스(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 키워드 뒤에는 단 하나의 클래스만 올 수 있음 상속을 구현하는 경우 상위 클래스는 하위..