1.Object 형


Object형은 모든 자료형의 상위, 부모에 위치한 자료형이다.


모든 자료형을 받을 수 있다.


안에 무엇이 들어갈지 모를때 Object로 선언하여 먼저 값을 받고 instance of로 값을 확인하여 사용한다.



package chap08.exam03.obj;

public class Box {
	private Object value; // 이 안에 뭐가 들어갈지 모르기 때문에 object 선언

	public Object getValue() { // 겟터 셋터 설정
		return value;
	}

	public void setValue(Object value) {
		this.value = value;
	}
}
package chap08.exam03.obj;

public class Main {

	public static void main(String[] args) {
		// 송장 없는 택배박스
		Box box = new Box();
		box.setValue(1234);
		//캐스팅을 할 때는 instanceof를 활용해야 안전하다.
		int val = (int) box.getValue();
		System.out.println(val);
	}

}


1.String


String은 하나의 자료형이라기 보다는 클래스라고 이해하는편이 쉽다.


문자형을 배열처럼 나열하여 문자열을 만든게 String이다.


String은 만들때 다양한 메소드들, 생성자들이 구현되어 있다.







- 다양한 초기화 방법


package chap08.exam01.string;

public class StringMehod {

	public static void main(String[] args) {
		// 문자열 만드는 방법
		String str1 = "abcd";
		
		String str2 = new String("abcde");
		
		char[] alphabet = {'a','b','c','d','e','f'};
		String str3 = new String(alphabet);
		
		System.out.println(str1);
		System.out.println(str2);
		System.out.println(str3);
	}

}


- 문자열 길이 (length())


- 특정 인덱스 가져오기 (charAt(n))


- 특정 부분부터 원하는 부분까지 잘라내기 (substring(n1, n2) , 자주 쓰이므로 꼭 알아두자


- 문자 배열을 문자열으로 / 문자열을 문자 배열로 넣기


- 특정 구분자를 기준으로 나누기 (split(""))


- 특정 문자열 찾기 (indexOf("")), (lastIndexOf(""))



package chap08.exam01.string;

public class CharArr {

	public static void main(String[] args) {
		
		// 문자열이 배열을 기반으로 해서 가능한 기능
		String str = "asdfghj";
		String strResult;
		int intResult;
		char charResult;
		
		// 문자열의 길이
		System.out.println(str.length());
		
		// 특정 인덱스 가져오기
		System.out.println(str.charAt(3));
		
		// 잘라내기 (자주 씀)
		strResult = str.substring(1, 5); // asdfghj
		// 1번 부터 보여주고 5번부터 잘라내라
		System.out.println(strResult); // sdfg
		
		// 문자열 -> 배열
		char[] chararr = str.toCharArray();
		System.out.println(chararr);
		
		// 배열 -> 문자열
		strResult = new String(chararr);
		System.out.println(strResult);
		
		// 특정 구분자를 기준으로 나누기
		str = "a|b|c|d|e|f|g";
		// 역슬래쉬나 버티컬바와 같은 특수 문자는 문자로 인식이 안됨
		String[] strArr = str.split("\\|"); // 이스케이프 문자인 역슬래쉬를 사용
		for(String s : strArr) {
			System.out.println(s);
		}
		
		// 특정 문자열 찾기
		str = "asfgdhgvabfkjaffasjkfn"; // 0, 8, 13, 16
		int idx = str.indexOf("a");
		// 무조건 첫번째 문자만 반환 한다.
		System.out.println(idx);
		idx = str.lastIndexOf("a");
		// 무조건 뒤에서 부터 첫번째 문자의 인덱스를 반환 한다.
		System.out.println(str.length() + "중 " + idx + "번째");
		// 3개의 a를 모두 찾을 수 있는 방법
		// indexOf("찾을 문자", 시작할 인덱스)
		int a = 0;
		while(true) {
			System.out.println(str.indexOf("a", a));
			a = str.indexOf("a", a) + 1;
			if(str.lastIndexOf("a") < a) {
				break;
			}
		}
	}

}



- 같은지 다른지 비교 (equals(""))


- 공백 제거, Excel 자료 불러올 때 쓰임 (trim())


- 특정 문자 포함 여부 (contains(""))


- 특정 문자열로 시작 or 끝나는가?, 파일 형식 알아낼 때 자주 쓰임 (startsWith(""), endWith(""))


- 문자열 교체 (replace(""))



package chap08.exam01.string;

public class StringUtil {

	public static void main(String[] args) {
		String str = "asdfg";
		
		String strResult;
		int intResult;
		boolean boolResult;
		
		// 문자열 비교
		boolResult = str.equals("abc"); // true | false
		System.out.println("두 문자가 같습니까? " + boolResult);
		
		intResult = str.compareTo("asd"); // 일치하지 않는 갯수
		System.out.println("두 문자가 같습니까? " + intResult);
		
		// 앞 뒤 공백제거 (excel 자료 불러올 때 종종 쓰임)
		str = " 가나다라마바사 ";
		strResult = str.trim();
		System.out.println(str);
		System.out.println(strResult);
		
		// 특정 문자 포함 여부 확인(잘 안씀)
		boolResult = str.contains("다");
		System.out.println("'다'를 포함하고 있는가? " + boolResult);
		
		// 특정 문자열로 시작 | 끝나는가?
		str = "[img]uploadFile.png";
		boolResult = str.startsWith("[img]");
		System.out.println("[img]로 시작되나? " + boolResult);
		boolResult = str.endsWith("png");
		System.out.println("png로 끝나는가? " + boolResult);
		
		// 문자열 교체
		strResult = str.replace("img", "이미지");
		System.out.println("str : " + strResult);
	}

}



- 더해서 넣기


- String Builder


- String Buffer



package chap08.exam02.compare;

public class Compare {

	public static void main(String[] args) {
		String str = "문자열을 "; // 객체 1개
		str += "추가 할 때 마다 "; // 객체 1개
		str += "객체가 추가 된다."; // 객체 1개
		System.out.println("String : " + str);
		
		// Builder나 Buffer는 하나의 객체를 확장하며 사용
		StringBuilder builder = new StringBuilder("문자열을 ");
		builder.append("추가 할 때 마다 ");
		builder.append("객체의 크기가 늘어 난다.");
		System.out.println("builder : " + builder);
		
		// StringBuffer는 동시 접속을 허용하지 않는다
		StringBuffer buffer = new StringBuffer("문자열을 ");
		buffer.append("추가 할 때 마다 ");
		buffer.append("객체의 크기가 늘어 난다.");
		System.out.println("buffer : " + buffer);
	}

}


1.Throw


Throw 예외처리는 예외가 예상되는 클래스와 메소드 이름 옆에 명시해줘야 하며 


오류가 발생한다면 throw에 적어놓은 클래스가 작동한다.


다르게 말하면 책임을 다른 클래스에 전가한다고 할 수도 있으며


따로 만들어 예외상황을 대처할 수 있다.


Java에서 미리 만들어둔 다양한 Exception도 역시 사용 가능하다.




package chap07.exam07.turn;

public class Sub {
	public void method1() throws NumberFormatException {
		// 2. method2()에게 일을 시킨다.
		method2();
		// 5. main에 책임 전가
	}
	public void method2() throws NumberFormatException {
		Integer.parseInt("asdfg"); // 3. 문제발생
		// 4. method1에 책임 전가
	}
}
package chap07.exam07.turn;

public class Main { // 비유로 폭탄돌리기

	public static void main(String[] args) throws Exception {
		// 1.main에서 Sub.method1()에게 일을 시킨다.
		Sub sub = new Sub();
		sub.method1();
		// 6. 결국 JVM에 책임을 전가 - 예외 메세지만 뿌려준다.
	}

}





2.커스텀 예외처리


Throw에 직접 작성한 클래스 파일을 지정하는 것이다. 예제를 확인해보자

package chap07.exam08.custom;

// 처음에 exception을 상속하는데 일반 예외라서 컴파일러에 오류가 걸리므로
// runtime exception으로 변경
public class ReservedException extends RuntimeException {

	public ReservedException(String msg) {
		super(msg);
	}
	
}
package chap07.exam08.custom;

public class JoinMember {
	
	String[] reserved = {"admin", "tester", "member"};
	
	public void regId(String userId) {
		// userId가 reserved에 있는 값과 일치 하면 안됨
		for(String name : reserved) {
			if(name.equals(userId)) {
//				System.out.println("예약어 입니다.");
				// 예외 발생이 목적이므로 변경
				// throw new XXXException("msg");
				// throw new RuntimeException("실행 예외");
//				throw new Exception("일반 예외"); // java에서 잡아주는 예외이므로 빨간줄
				throw new ReservedException(userId + "는 예약어 입니다.");
			}
		}
	}
}
package chap07.exam08.custom;

public class Main { // 임의의 예외처리 만들기

	public static void main(String[] args) {
		JoinMember join = new JoinMember();
		join.regId("admin");
	}

}


'개념 및 코딩 > 06.기타' 카테고리의 다른 글

[JAVA]06-06.Generic  (0) 2018.09.03
[JAVA]06-05.Object  (0) 2018.09.03
[JAVA]06-04.String  (0) 2018.09.03
[JAVA]06-02.예외처리 instance of, try catch  (0) 2018.09.03
[JAVA]06-01.중첩 클래스, 중첩 인터페이스  (0) 2018.09.03

+ Recent posts