상위 클래스가 사용될 필요가 없고 하위 클래스에서 구체적으로 정의될 경우 사용
선언만 되어져있음. 메소드의 형태만 유지
하위에서 반드시 구현되어야함. abstract class는 객체 생성이 불가능 하다.
declaration:선언 / definition :정의
Java - 인터페이스
ㅁ 인터페이스의 개요
- 다른 클래스 간에 공통적인 기능을 정의할 때 인터페이스를 사용
- 인터페이스 내부에 공통기능을 선언하고, 하위 클래스에서 인터페이스 내에서 선언된
메소드들을 구현
ㅁ 인터페이스의 특징
- 다중상속을 위한 Java 프로그래밍 기법
- 인터페이스의 멤버변수는 상수변수 (public static final 변수)
- 인터페이스의 메소드는 추상 메소드 (public abstract 메소드)
- 객체 생성 불가능
- super 키워드 사용 불가능
- 구현된 것은 없으며 틀만 존재
- 하위클래스는 메소드 overriding 하여 정의함
ㅁ 인터페이스의 정의
public interface 인터페이스명 { // 인터페이스 멤버 부분 public final static 타입 변수이름; public abstract 반환타입 메소드명 (매개변수); }
// 초록색 : 생략가능 / 빨간색 : 사용자 지정 |
ㅁ implements 키워드
- 여러 개의 인터페이스 지정 가능
[접근제어자] class 클래스명 implements 인터페이스명 { // 클래스 멤버부분 // 메소드 overriding } |
ㅁ 인터페이스의 구현
- 예제1
interface Alpha { String master = "홍길동"; void skill(); }
interface Beta { String guest = "홍길남"; void learn(); }
class Gamma implements A, B { public void skill() { System.out.println("강사가 강의함"); } public void learn() { System.out.println("수강생이 수강함"); } } |
ㅁ 인터페이스의 다형성
- 인터페이스를 구현했던 클래스 타입의 객체를 생성하여 인터페이스 타입으로
형변환 가능
Alpha a = new Gamma(); Beta b = new Gamma(); |
- overriding된 메소드를 호출 가능
Alpha a = new Gamma(); a.skill(); a.learn(); |
ㅁ instanceof 연산자
- instanceof 연산자를 이용해 객체의 형변환 여부를 판단
a instanceof Alpha |
ㅁ 인터페이스를 구현했던 클래스 타입으로 명시적 형변환을 하면, 원래 클래스에
포함된 메소드를 사용 가능
Alpha a = new Gamma(); Gamma g = (Gamma)a; |
class StringEx
{
public static void main(String[] args)
{
String s1 ="Hello ";
String s2 ="java ";
String s3 =s1.concat(s2); //문자열을 연결
System.out.println(s3); //결과 : Hello java
char s4 = s1.charAt(1); //문자열에서 한글자를 빼낸다
System.out.println(s4); //결과 : e
String s5 = s3.substring(6,8); //문자열의 6번째 부터 8번째 전까지 입력
System.out.println(s5); //결과 : ja
String s6 = s3.substring(6); //문자열의 6번째 부터 끝까지 입력
System.out.println(s6); //결과 : java
String phone = "010-1234-5678";
String [] s7 = phone.split("-"); //키워드로서 짜른다
System.out.println(s7[0]); //결과:010
System.out.println(s7[1]); //결과:1234
System.out.println(s7[2]); //결과:5678
for(int i=0; i<s7.length; i++)
{
System.out.println(s7[i]);
}
//문자열 비교
String s8 = "aaa";
String s9 = "aaa";
String s10 = new String("aaa");
System.out.println(s8==s9); //결과 : true
System.out.println(s8==s10); //결과 :false --> 데이터 베이스에서 값을 가지고 올때
주소값을 가져오기 때문에 비교 할수가
없다. ==으로 비교해서는 오류가 발생할
수도 있다.
/*
=========================================================================
s1 s2 s3
aaa aaa 1000(주소값이 들어가 있다.)
▽
aaa(1000)
=========================================================================
*/
System.out.println(s8.equals(s9)); //결과 : true
System.out.println(s8.equals(s10)); //결과 : true
}
}
string(문자열) 비교 ==, equals 의 차이
== 는 선언된 변수가 참조하는 메모리 주소를 비교함
equals()는 객체가 같은지 비교함
가비지컬렉터 (gc)
new를 통해 생성된 변수들은 heap 메모리 영역에 생성이되는데
heap메모리 영역 할당은 프로그래머가하고, 더이상 사용되지 않는 메모리는 가비지컬렉터가 해제해준다
메소드 내에서 사용 되는 변수들은 stack 메모리 영역에 생성된다
stack 메모리에 설정된 변수들은 블럭 ({ }) 이 끝나면 사용할수없다 (메모리 해제)
gc는 프로그래머에 의해 조정될수없다
gc가 언제, 어떤순서로 메모리를 정리하는지 알수없다
System.gc(); 로 gc를 요청할수있지만 언제 처리해줄지는 모른다.
String 메소드
String s1 = "seoul korea";
s1.subString(s,e) : 문자열의 s 번째에서 e-1번째까지 잘라낸다 (e를 생략하면 s번째부터 끝까지)
s1.equals(str) : 문자열 s1과 str 의 값을 비교 ('=='은 서로의 주소값만 비교)
s1.equalsIgnoreCase(str) : 문자열 s1과 str 을 대소문자를 무시하고 값비교
s1.startsWith(str) : 문자열이 str로 시작하는지 검사
s1.endsWith(str) : 문자열이 str로 끝나는지 검사
s1.indexOf(str) : 문자열에서 str이 있는지 검사 있으면 있는지점의 숫자, 없으면 -1 반환
s1.lastIndexOf(str) : 문자열을 뒤에서부터 검사
s1.charAt(n) : 문자열에서 n번째 문자를 char형으로 반환
s1.compareTo(str) : 문자열을 사적식으로 비교
(첫글자부터 하나씩 비교해서 다른 글자에서 차이나는 아스키코드값만큼 반환)
s1.replaceAll(str1,str2) : 문자열에서 str1을 str2로 모두 바꿈
s1.trim() : 문자열 앞뒤 공백제거
s1.split(str) : 문자열에서 str로 구분해서 배열로 담는다
'Programming > java 고급과정' 카테고리의 다른 글
java 고급과정 7일차 (0) | 2012.03.13 |
---|---|
java 고급과정 6일차 (0) | 2012.03.12 |
java 고급과정 4일차 (0) | 2012.03.08 |
java 고급과정 3일차 (0) | 2012.03.08 |
java 고급과정 2일차 (0) | 2012.03.06 |