본문 바로가기
개발/교육

(Java) 9일차

by kakk789 2022. 4. 7.

익명 클래스

객체 생성 시 ctrl + space -> Anonymous Inner Type
  • 원래 추상클래스는 객체를 만들 수 없다. 왜 생성할 수 없냐면 추상메소드를 선언만 하고 정의하지 않았기 때문인데, 추상클래스를 객체로 만들고 싶다면 객체 생성 시에 추상메소드를 정의하면 된다.
  • 추상클래스를 상속받은 클래스를 정의하는데 따로 이름을 정해주지 않고 바로 추상메소드를 오버라이딩한 클래스를 만들면서 바로객 체를 생성할때에 객체를 생성함과 동시에 추상메소드를 정의할 수 있음

객체 생성과 동시에 추상 메소드 정의

인터페이스 (interface)

  • 다중 상속의 효과를 기대할 목적으로 "인터페이스"를 사용
  • 다중 상속을 하려면 클래스는 말고 인터페이스를 사용 해야한다.
  • 인터페이스는 상수와 추상 메소드로로 구성
  • 인터페이스 안에 변수이름 앞에 final을 붙이지 않아도 자동으로 final
  • 인터페이스 안에 메소드는 abstract를 따로 붙이지 않아도 자동으로 abstract
  • 구현 시 class에서 implements 를 붙여서 구현
  • 인터페이스도 클래스처럼 객체를 만들 수 있음
interface [인터페이스 이름] {

}
class C implements [구현 할 인터페이스] {

}

A, B 인터페이스 생성 후 구현하는 코드

interface A{
	public int a = 10;
	public void pro();
}
interface B{
	public int b = 20;
	public void test();
}
class C implements A, B{
	@Override
	public void test() {
		System.out.println("test");
	}
	@Override
	public void pro() {
		System.out.println("pro");
	}
}

public class InterfaceTest {
	public static void main(String[] args) {
		C ob = new C();
		ob.test();
		ob.pro();
	}
}

class 상속과 interface 구현을 동시에 할 수 있음.

class D extends [상속받을 클래스] implements [구현 할 인터페이스들] {
}

자바 문자열 처리

String

  • 특성은 변하지 않는 문자열
  • 예를들어 string에 더하기 연산을 하게 되면 새로운 객체를 생성하게 되고 참조 변수는 새로운 메모리를 참조
  • 이전에 참조하던 메모리는 더이상 참조되지 않는 garbage가 됨
  • 그래서 String은 변하지 않을 것 같은 문자열만 처리하는게 좋다 

StringBuffer

  • 특성은 변하는 문자열
  • StringBuffer는 String과 다르게 원래 객체에 배열을 추가
  • append()함수를 이용하여 문자열을 추가할 수 있음

StringBuffer를 String으로 받는 방법

1. new String(stringbuffer) -> StringBuffer형식을 String으로 받고 싶을 때

2. stringBuffer.tostring()  -> to.string()을 사용해서 받아도됌.

public class StringBufferTest {
	
	public static void pro(String data) {
		System.out.println(data);
	}

	public static void main(String[] args) {

		StringBuffer sb = new StringBuffer("hello");
		
		sb.append("java");
        
		// pro(sb); // 에러
		pro(new String(sb));
		pro(sb.toString());
	}
}

Stringbuilder

  • 특성은 변하는 문자열

 

아래와 같이 char형의 배열도 String으로 받을 수 있다.

		char []data = {'a','b','c','d','e','f','g'};
	
		String data1 = new String(data);
		String data2 = new String(data,1,3);
		System.out.println(data1);
		System.out.println(data2);

String 관련 함수

endsWith 

endsWith ( String suffix)
반환 값 : boolean
  • 문자열이 특정 패턴으로 끝나는지 확인

startsWith 

startsWith(String prefix)
startsWith(String prefix, int toffset)
반환 값 : boolean
  • 문자열이 특정 패턴으로 시작하는지 확인

성이 김씨일 경우를 찾는 코드

		Scanner sc = new Scanner(System.in);
		System.out.println("이름을 입력하세요");
		String name = sc.next();
		
		if (name.startsWith("김")) {
			System.out.println("김씨입니다.");
		}
		else {
			System.out.println("김씨가 아닙니다.");
		}

equalsIgnoreCase

endsWith(String suffix)
반환 값 : boolean
  • 문자열 비교 시 대소문자 구분 안함
		String data1 = "hello";
		String data2 = "hello";

		if(data1.equalsIgnoreCase(data2)) {
			System.out.println("대소문자를 구별없이 같아요");
		}
		else {
			System.out.println("대소문자를 구별없이 달라요");

indexOf

indexOf(int ch)
indexOf(int ch, int fromIndex)
indexOf(String str)
indexOf(String str, int fromIndex)
반환 값 : int
  • 찾는 문자열이 몇번째 인덱스에 있는지 확인 가능 (0부터 시작)
		String data = "hello java";
		int n= data.indexOf("j");
		System.out.println(n);

lastIndexof (indexOf 역순)

lastIndexOf(int ch)
lastIndexOf(int ch, int fromIndex)
lastIndexOf(String str)
lastIndexOf(String str, int fromIndex)
반환 값 : int
  • 찾는 문자열을 마지막부터 몇번째 인덱스에 있는지 확인
		String data = "hello java";
		int n3 = data.lastIndexOf("a");
		System.out.println(n3);

replace

replace(char oldChar, char newChar)
replace(CharSequence target, CharSequence replacement)
반환 값 : String
  • 문자열을 다른 문자로 치환
  • 주의할 것은 원본 데이터가 담긴 객체의 내용은 그대로이고 새로운 객체에 담기는 개념

String 타입 data에 "java'를 "oracle"로 치환

        String data = "hello java";
        String data2 = data.replace("java", "oracle");
		System.out.println(data2);
		System.out.println(data);

split

split(String regex)
split(String regex, int limit)
반환 값 : String [] 

' , '를 기준으로 분리 후 배열 값으로 리턴

		String data = "김유신,홍길동,장보고,연개소문";
		String kk[]= data.split(",");
		for (int i=0 ; i<kk.length; i++) {
			System.out.println(kk[i]);
		}

substring 

substring (int beginIndex, int endIndex)
beginIndex 는 0부터 ~ endIndex 까지 문자열 자르기
주의사항은 : endIndex 는 endIndex -1 까지만 출력하므로 +1을 해줘야함

substring (int beginIndex)
beginIndex 부터 ~ 끝까지
		String data = "hello java hello oracle";
		String aa = data.substring(6, 10);
		System.out.println(aa);

toUpperCase

toLowerCase()
toLowerCase(Locale locale)
반환 값 : String
  • 모두 소문자로 바꾸기
  • 주의할 것은 원본 데이터가 담긴 객체의 내용은 그대로이고 새로운 객체에 담기는 개념

toUpperCase

toUpperCase()
toUpperCase(Locale locale)
반환 값 : String
  • 모두 대문자로 바꾸기
  • 주의할 것은 원본 데이터가 담긴 객체의 내용은 그대로이고 새로운 객체에 담기는 개념
		String upper = "abcdefu";
		System.out.println(upper.toUpperCase());

String.join

String.join("델리미터", 배열)
String.join("델리미터", 변수1, 변수2 등등)
반환 값 : static String
  • join 함수를 이용하여 배열 사이에 델리미터 추가하기
	         String.join(", ",arr);

trim

  • 공백제거
  • 반환 값 : String
		data.trim();

예제 - member 배열 중에서 이름의 공백을 제거하고 tiger 가 몇명 인지 출력(대소문자 상관없음)

		String []member = {"tiger","kim","Tiger","hong","   tiger", "lee"," Tiger"};
		int n=0;

		for (String name:member) {
			if (name.trim().toLowerCase().equals("tiger")) {
				n ++;
			}
		}
		System.out.println(n);

예제 - String 타입의 url 변수에 담긴 데이터의 마지막 / 뒤에 있는 스트링 값을 출력

출력 값 : "list" 라는 문자열 출력 됨
		String url = "http://www.xxx.co.kr/list";
		System.out.println(url.substring(url.lastIndexOf("/")+1));

String.valueOf(변수)

valueOf(int, boolean, char, char[], double, float, long, Object)
반환 값 : static String
  • string 타입으로 변환

팁 ) 스트링 만드는 2가지 방법

  • 1. 해당 자료형에 스트링 타입의 공백을 더해주면 됌 (+"" )
  • 2. String.valueOf 사용 (fm 방식)

예시) 속성

		int data = 1024;
		String aa= String.valueOf(data);   // 방법 1
		String bb = data +"";  // 방법 2

Wrapper 클래스

  • 각 기본 자료형에 따른 클래스들을 말함
  • 해당 클래스를 이용하여 형 변환 가능
[Wrapper클래스명].parseXXX( [변환할 변수] )

ex) Integer.parseInt(변수명)
    Double.parseDouble(변수명)
자료형   Wrapper 클래스
boolean    Boolean
char         Character
byte         Byte
short        Short
int           Integer
long        long
float        Float
double    Double

예외 처리( try~catch )

  • 자바에서 range 범위 초과나 기타 에러가 발생하였을 경우에 예외처리를 하여 오류 시 프로그램이 비정상 종료되는 것을 막을 수 있음.
try {
    정상 명령문;
} catch(예외 클래스 e) {
    예외 시 명령문;
} catch(예외 클래스 e) {
    예외 시 명령문;
} catch(예외 클래스 e) {
    예외 시 명령문;

자바 GUI용 패키지 모음

  • javax.swing

java.lang

  • java.lang 패키지의 모든 클래스들은 자동으로 import 되기 때문에사용자가 따로 import할 필요가 없음

Char 변수 빼기(마이너스, -) int 변수

char - int (다른 자료형 끼리 연산)

'A' - 65 == 0 이 나옴
'a' - 97  == 0이 나옴
  • 'A' - 65 는 아래 코드와 같이 0이 출력된다.
  • 숫자형을 char로 형변환 하면 해당하는 아스키 코드 값이 출력 됨. (반대도 성립)
  • integer 타입의 숫자 65는 -> 문자 'A'로 출력

아래 코드 출력 값

		int data = 65; //대문자 A 정수 값
		int data2 = 97; //소문자 a 정수 값
		
		System.out.println((char)data);
		System.out.println((char)data2);	
		System.out.println('A'-65);
		System.out.println('a'-97);

 

반응형

'개발 > 교육' 카테고리의 다른 글

(Java)13일차  (0) 2022.04.13
(Java)10일차  (0) 2022.04.08
(Java) 7일차  (0) 2022.04.05
(Java) 6일차  (0) 2022.04.04
(Java) 5일차  (0) 2022.04.01

댓글