728x90
interface (다중상속)


단일 상속의 한계를 극복한 다른 언어에서 찾기 힘든 자바의 고급 기능

다중 상속과 비슷한 기능을 제공하며, 외부를 서로 이어주는 통로 역할을 한다.

 

추상 클래스는 추상 메소드와 일반 메소드를 가질 수 있는 반면,

인터페이스는 오직 추상 메소드만 가질 수 있다.

 

※ 주의사항

  • 인터페이스 내에 존재하는 모든 메소드는 public abstract로 선언된다. 
  • 인터페이스 내에 존재하는 모든 메소드는 static이 될 수 없다.
  • 인터페이스 내에 존재하는 모든 변수는 public static final로(상수) 선언된다.
  • 클래스에 인터페이스 상속시 인터페이스 내에 정의된 모든 추상 메소드를 구현해야 한다.

<인터페이스 생성하기>

interface 인터페이스명{
public abstract void();		//추상 메소드
}

  
<인터페이스 사용하기>

class 클래스명 implements 인터페이스명{
   인터페이스에서 미구현 된 메소드 오버라이드;
}

상속과 인터페이스의 차이점

 

  • 상속 class A extends B
    B라는 클래스를 상속받아 A의 기능을 더한다.
    순수 상속 : 부모로부터 모든 권한과 재산 능력을 가져오기
      
  • 인터페이스 class A implements B
    B라는 인터페이스를 구현한다.0
    권한 상속 : 인터페이스만 가져오기 (비어있는 것을 가져와서 사용)

'JAVA' 카테고리의 다른 글

다형성 (Polymorphism)  (0) 2021.07.19
추상화 (Abstract)  (0) 2021.07.19
StringBuffer와 StringBuilder  (0) 2021.07.19
오브젝트 (Object)  (0) 2021.07.19
접근제어자 (AccessModifier)  (0) 2021.07.18
728x90
문자열 연결

 

 

String은 소위 불변 객체라고 한다.

2개의 String 객체가 있을 때, 두 객체를 더하는 연산을 하면 새로운 String을 생성한다.

즉 더하는 행위는 메모리 할당과 메모리 해제를 발생시키며 더하는 연산이 많아진다면 성능이 낮아지는 결과로 이어질 수 있다.

 

StringBuilder/StringBuffer는 String끼리 더할 때 새로운 객체를 생성하는 것이 아니라, 기존의 데이터에 더하는 방식을 사용하므로 속도가 빠르고 상대적으로 부하가 적다. 따라서 긴 문자열을 더하는 상황이 발생할 경우 StringBuilder를 적극적으로 사용하는 것이 좋다.

 

StringBuilder는 클래스 안에 배열 공간을 미리 만들어놓고 문자열을 추가하는 함수가 호출되면 추가되는 문자열을 해당 배열 공간에 바로 추가한다.

만약 추가하다가 배열 공간이 부족해지면 이때만 공간을 늘려서 기존 문자열을 복사하는 방식이기 때문에, 복사하는 횟수가 현저히 줄어들어 시간이나 공간적으로 매우 효율적이다.


 

StringBuffer

 

멀티 스레드 환경에서 사용할 수 있도록 동기화가 되어있다.


기본 생성자로 생성하면 배열의 크기가 16인 초기 버퍼(buffer)를 만든다.

 


 StringBuilder

 

단일 스레드 환경에서만 가용하도록 설계되어있다.

 

StringBuilder(int 값); 값만큼 문자를 저장하고 초기 버퍼를 가진다.

버퍼가 부족할 경우 자동으로 버퍼 크기를 늘리기 때문에 초기 버퍼가 크게 중요하지 않다.

 

※ 최근 JDK버전(JDK 1.5 version 이후)에서는 StringBuilder를 사용하지 않는 경우가 많다.

    문자열 연산에 String 클래스를 사용하더라도 컴파일 단계에서 StringBuilder로 컴파일되어 작동하도록 되어있다.

    때문에 따로 StringBuilder를 사용할 이유가 없어졌다.

 


예제 1.

<StringBuilder>

StringBuilder sb = new StringBuilder();
System.out.println(sb);
		
sb.append("추가");			//①
sb.append("JAVA");		
System.out.println(sb);
		
sb.insert(2, "+");			//②
System.out.println(sb);
				
sb.deleteCharAt(3);			//③
System.out.println(sb);
		
sb.delete(1, 4);			//④
System.out.println(sb);
		
sb.replace(1, 2, "SPRING");		//⑤
System.out.println(sb);
		
String str = sb.toString();		//⑥
System.out.println(str);
  • ① .append( "a" ): 뒤에 "a" 추가
  • ② .insert( index, "a" ): 해당 위치에 "a" 추가
  • ③ .deleteCharAt( index ): 해당 위치의 문자 제거 
  • ④ .delete( 시작, 끝 ) 시작부터 끝 직전(끝-1)까지 제거 
  • ⑤ .replace( 시작, 끝, "a" ); index 시작부터 끝 직전(끝-1) 까지의 문자를 "a"로 교체
  • ⑥ .toString: StringBuilder를 String으로 변환 

[실행결과]


추가JAVA
추가+JAVA
추가+AVA
추VA
추SPRINGA
추SPRINGA

'JAVA' 카테고리의 다른 글

추상화 (Abstract)  (0) 2021.07.19
인터페이스 (interface)  (0) 2021.07.19
오브젝트 (Object)  (0) 2021.07.19
접근제어자 (AccessModifier)  (0) 2021.07.18
생성자 (Constructor)  (0) 2021.07.18
728x90

자바가 api를 정의한 모든 클래스와 사용자가 만든 클래스의 최상위 클래스

기본적으로 모든 클래스는 Object를 상속받아서 사용한다.

 

Object는 자동으로 import된다.
 

Objec 하위 클래스 :   
- String
- Boolean
- StringBuffer
- Character
- Number 

'JAVA' 카테고리의 다른 글

인터페이스 (interface)  (0) 2021.07.19
StringBuffer와 StringBuilder  (0) 2021.07.19
접근제어자 (AccessModifier)  (0) 2021.07.18
생성자 (Constructor)  (0) 2021.07.18
오버로드 (Overload)  (0) 2021.07.18
728x90

멤버 변수와 클래스 변수를 외부에서 접근하지 못하도록 제한하는 역할을 하는 제어자.

 

접근 제어자를 통해서 각 API의 접근 권한을 제한할 수 있다.

 

클래스를 생성할 때 자바 파일명와 동일한 클래스의 경우 앞에 public을 붙여준다.파일내의 수많은 클래스를 정의할 때 하나의 대표 클래스를 지정하고 파일명과 동일하게 맞춰주는 것으로가독성에 크게 도움이 된다.

 

※ 클래스 앞에 붙는 접근제어자는 public, default만 사용할 수 있다.

 


접근제어자의 접근 범위

 

public > protected > default(package) > private 

  • public : 가장 넓은 범위로 패키지 제한없이 모든 접근 가능.
  • protected : 같은 패키지내에서 접근 가능.
    외부 패키지에서는 해당 클래스를 상속받은 클래스라면 접근 가능.
  • default(package) : 아무런 접근 제한을 두지 않을 경우(비어있을 때) 같은 패키지 내에서 접근 가능.
    외부 패키지에서는 접근 불가.
  • private : 같은 클래스 내에서만 접근 가능
    외부 패키지에서는 접근 불가.
  클래스 내부 동일 패키지 외부 패키지 그외
public O O O O
protected O O O X
default O O X X
private O X X X

 

'JAVA' 카테고리의 다른 글

StringBuffer와 StringBuilder  (0) 2021.07.19
오브젝트 (Object)  (0) 2021.07.19
생성자 (Constructor)  (0) 2021.07.18
오버로드 (Overload)  (0) 2021.07.18
오버라이드 (Override)  (0) 2021.07.18

+ Recent posts