Java 반올림, 내림, 올림 - round, ceil, floor






결과

결과





코드

public static void main(String[] args) {
		double num = 3.14;
		System.out.println("절대값 : " + Math.abs(num*-1));
		
		System.out.println("올림 : " + Math.ceil(num));
		System.out.println("내림 : " + Math.floor(num));
		
		System.out.println("반올림 : " + Math.round(num));
		System.out.println("소수점 아래 2째에서 반올림 : " + Math.round(num*10)/10.0);
	
	}





Math 메소드


int abs(int num) | double abs(double num) : 절대값을 얻는다.

- int형 double형 둘다 사용할 수 있다.


- 절대값이므로 양수일 때는 그대로며 음수일 때는 -1을 곱한 결과와 같다.





double ceil(double num) : 올림값을 얻는다.

- 올림값을 얻어 double형으로 리턴해준다.





double floor(double num) : 내림값을 얻는다.

- 내림값을 얻어 double형으로 리턴해준다.





long round(double num) : 반올림 값을 얻는다.

- 넘겨받은 값을 반올림하여 long형으로 리턴한다.


- round() 메소드는 항상 소수점 1째 자리에서 반올림해준다.


- 소수점 아래 n번 째에서 반올림을 시도하고자 한다면 먼저 10n-1를 곱해준 후 round로 반올림한다.

그리고 다시 10n-1을 나누어줌으로써 얻을 수 있다.


 주의할점으로는 round의 리턴형이 long이므로 이를 int형으로 나누어 버리면는 변수가 정수형이되어버린다.

따라서, 위에서 코드를 보면 10.0 나누어준 것처럼 Double형으로 나누어줌으로써 Double형으로 자동 형변환이 일어나도록하여야 소수점 아래 값들을 얻을 수 있다.





Java StringBuilder, StringBuffer




결과

결과





코드

public static void main(String[] args) {
		StringBuilder sb = new StringBuilder();	// 초기화
		sb.append("abcd");	// abcd
		sb.insert(2, "zzzz");	// abzzzzcd
		sb.delete(6,8);			// abzzzz
		sb.replace(0, 2,  "xxxx");	// xxxxzzzz
		sb.reverse();	// zzzzxxxx
		sb.setCharAt(4, 'y');	// zzzzyxxx
		
		String s = sb.toString();
		String s2 = sb.substring(5);
		
		System.out.println("String : " + s);
		System.out.println("String2 : " + s2);
		
	}





StringBuilder()

이미지1

- String은 덧셈 연산처럼 수정하였을 때는 이미지1 처럼 기존의 String 객체를 수정하는 것이 아니라 수정한 새 String 객체를 만들어 연결한다.


- 위 같은 과정이 빈번히 반복되다보면 쓰레기 객체가 늘어나 성능을 안좋게 한다.


- 때문의 StringBuilder를 사용하면 버퍼(데이터를 임시로 저장)에 문자열을 저장, 추가, 수정, 삭제 작업을 추가적인 객체를 생성않으며 할 수 있다.


- 사용할 수 있는 메소드는 String에서도 있는 replace, substring들도 있다. 그리고 append, delete, insert와 같은 추가, 삭제하는 메소드들이 있다.


- 수정 작업이 끝난 후 String 변수에 저장하고자 하면은 toString()을 사용하면 된다.





StringBuffer() vs. StringBuilder()

- StringBuffer()와 StringBuilder()의 사용법은 동일하다.


- 단, StringBuffer()은 멀티 스레드 환경에서 사용할 수 있어 스레드에 safe(안전)하다.


- 반면에 StringBuilder()는 단일 스레드 환경에서 사용하도록 설계되어있다.


- 멀티 스레드 환경이 아니라면 StringBuilder()를 사용하는 것이 더 성능이 좋다.





참조

https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html


https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html







Java int, double -> String, String -> int, double




결과

결과





코드

public static void main(String[] args) {
		String s = "100";
		int num = 10;
		double num2 = 12.34;
		
		System.out.println("--- String -> int, double ---");
		System.out.print("변환 전 덧셈 : ");
		System.out.println(s+5);
		System.out.print("변환 후 덧셈 : ");
		System.out.println(Integer.parseInt(s)+5);
		System.out.print("Double로 변환 : ");
		
		System.out.println(Double.parseDouble(s));
		
		System.out.println("\n--- int -> String ---");
		if(String.valueOf(num) instanceof String)
			System.out.println("num은 String이다.");
		if(num2+"" instanceof String)
			System.out.println("num2은 String이다");
		
	}





String -> int, double

- int형으로 변환할 때는 Integer.parseInt(String s) 를 사용한다.


- double형으로 변환할 때는 Double.parseDouble(String s) 를 사용한다.


- "String + int =" 일경우 int가 String으로 자동으로 변환되어 연산된다.

 따라서, 형변환 전 연산한 값과 형변환 후 연산 값은 다른 결과를 얻는다.  





int, double -> String

- String.valueOf( int num)를 사용하여서 String으로 형변환할 수 있다. 

 valueOf 메소드는 오버로드로 여러 타입이 선언되어 있어 Double형이나 Char형으로도 변환할 수 있다.


- 또는, 간단하게 ""를 더해주면 String형으로 변환된다.









Java 문자열 변경, 자르기 replace(), substring(), split()





결과

결과





코드

public static void main(String[] args) {
		String s = "aaaabbbb";
		String s2 = "aa-aa,bb-bb";
		
		System.out.println("문자열 : " + s);
		System.out.println("a를 c로 바꾸기 : " + s.replace("a", "c"));
		System.out.println("ab를 c로 바꾸기 : " + s.replace("ab", "c"));
		
		System.out.println("substring(4): " + s.substring(4));
		System.out.println("substring(0,4): " + s.substring(0, 4));
		System.out.println("\n문자열 : " + s2 + "\n---,로 문자열 분리---");
		String[] srr = s2.split(",");
		for(String temp : srr) System.out.println(temp);
		
		System.out.println("\n문자열 : " + s2 + "\n---,와-로 문자열 분리---");
		String[] srr2 = s2.split(",|-");
		for(String temp : srr2) System.out.println(temp);
	}





String replace(String old, String new) : 문자열 내 문자(열) 바꾸기

- old 문자(열) 을 new 문자(열) 로 변환한다.


- old 문자(열)이 없을 경우에는 본래 문자열을 받는다.





String substring(int begin [, int end]) : 문자열 잘라서 가져오기

- begin만 주었을 경우 begin부터 문자열 끝까지를 잘라서 리턴한다.


- end도 입력하였을 때는 index가 begin <= index < end 의 문자열을 가져온다.


- 범위를 벗어난 index를 입력하였을 때는 StringIndexOutOfBoundsException 에러가 발생한다.





String[] split(String tok) : 특정 문자를 경계로 문자열 자르기

- 구분자에 따라 문자열을 분리한 문자열 배열을 리턴한다.


- 구분자가 여럿 있을 경우 |을 사용하여서 추가로 지정하면 된다.


- 결과를 보면 ","로 잘랐을 때와 ",|-"로 잘랐을 시 다른 결과를 갖는것을 볼 수 있다.





Java 바이트 변환 getBytes(), equals(), trim()




결과

결과




코드

public static void main(String[] args) {
		String s = new String(" ab cde");
		String s2 = new String(" ab cde");
		
		System.out.println("문자열 : " + s);
		System.out.println("앞뒤 공백 제거 전 : " + s);
		System.out.println("앞뒤 공백 제거 후 : " + s.trim());
		System.out.print("객체 비교 : ");
		System.out.println(s == s2);
		System.out.println("문자열 비교 : " + s.equals(s2) + "\n");
		
		System.out.println("--- 바이트 변환 ---");
		try {
		// byte[] b = s.getBytes("EUC-KR");
		byte[] b = s.getBytes("UTF-8");
		
		System.out.print("바이트 형식 : ");
		for(byte t : b) {
			System.out.print(t + ", ");
		}
		
		String re = new String(b, "UTF-8");
		System.out.println("\n복구 : " + re);
		
		}catch(Exception e) {
			e.printStackTrace();
		}
	}





String trim() : 앞뒤 공백 제거

- 문자열 앞과 뒤의 있는 공백을 제거해 준다.


- 이후 입력 받은 문자열을 비교하거나 할 때 공백이 포함되어 원하는 결과를 얻을 못 얻을 수 있다.

 따라서 이같은 가능성이 있는 곳에는 사용해주어야 좋다. 단, 무분별한 사용은 낭비이다.





boolean equals(Object obj) : 문자열 비교

- 위 결과를 보면 '=='를 사용하여 객체를 비교하였을 시 false로 두 문자열이 다르다고 나온다. 이는 new를 사용하여서 다른 객체로 만들어주었기 때문이다.


- 대신 equals를 사용하면 그 객체의 문자열만을 비교하여서 true가 나오게 된다.





byte[] getBytes(String cs) : 받은 문자형식으로 변환된 byte 배열 생성

- 네트워크로 문자열을 전송하거나, DB의 이미지를 저장하거나 할 때 byte 배열 형식으로 변환할 때 사용한다.


- 'EUC-KR'은 영어는 1byte, 한글은 2byte로 변환한다.


- 'UTF-8'은 영어는 1byte, 한글은 3byte로 변환한다.


- 특정 형식으로 변환할 때는 UnsupportedEncodingException이 발생할 수 있어 try~catch문으로 예외처리를 해야만 사용할 수 있다.


- 다시 String으로 만들 때는 new String(byte[] b, String cs) 으로 디코딩하면 된다.





Java String 메소드 charAt(), indexOf(), length() 등.



결과

결과




코드

public static void main(String[] args) {
		String s = "aBcD BEfGh";
		
		System.out.println("문자열 : " + s);
		System.out.println("charAt(1) : " + s.charAt(1));
		System.out.println("indexOf('b') : " + s.indexOf('b'));
		System.out.println("indexOf(\"B\") : " + s.indexOf("B"));
		System.out.println("indexOf(\"B\". 2) : " + s.indexOf("B", 2));
		System.out.println("length() : " + s.length());
		System.out.println("toUpperCase() : " + s.toUpperCase());
		System.out.println("toLowerCase() : " + s.toLowerCase());
	}






char charAt(int index) : index의 문자 가져오기

- 해당 문자열의 입력한 인덱스의 문자를 리턴한다.


- 범위 밖에 인덱스를 입력하면 에러가 발생한다.





int indexOf(String s [, int index]) : 문자(열)의 index 구하기

- 인수로 받은 문자(열)을 문자열에서 찾아서 index를 리턴해 준다.


- 해당 문자(열)이 없을 경우 : -1 리턴


- 2번 째 파라미터를 주면 해당 index부터 문자(열)을 찾는다. 위 예시에서는 2를 주어서 'B'를 index 2부터 검색함으로써 5번 째의 있는 B의 index를 리턴 받았다.





int length() : 문자열 길이 구하기

- 문자열의 길이를 리턴한다.


- index는 0부터 시작하므로 마지막 index는 s.length()-1 이다.





String toUpperCase() : 문자열 대문자 변환

- 문자열을 대문자로 변환한 새로운 문자열을 생성해 리턴한다.





String toLowerCase() : 문자열 소문자 변환

- 문자열을 소문자로 변환한 새로운 문자열을 생성해 리턴한다.





Java Overloading vs. Override [오버로딩 vs. 오버라이딩]







1. 오버로딩 (Overloading)


- 클래스 내에 같은 이름의 생성자나, 메소드를 여러 개 생성하는 것


- 조건은 메소드 이름이 동일하고, 매개 변수의 개수, 순서, 타입 (들)이 달라야 한다.


- return 타입은 동일하든 말든 상관없다.


- 매개 변수의 이름만 다른 것은 에러가 발생한다.







2. 오버라이딩 (Overriding)


- 상속받은 자식 클래스에서 메소드를 재정의 하는 것을 말한다.


- 부모의 메소드와 동일한 리턴 타입, 메소드 이름, 매개변수들을 가져야 한다.


- 접근 제한은 더 넓어질 수 있다. ( 부모:default면 오버라이딩: defualt 또는 public)







'JAVA > 기초' 카테고리의 다른 글

Java 바이트 변환 getBytes(), equals(), trim()  (0) 2020.03.22
Java String charAt(), indexOf(), length() 등  (0) 2020.03.22
Java Annotation 어노테이션  (0) 2020.03.19
Java import  (0) 2020.03.18
Java 상수 static final  (0) 2020.03.18

Java Annotation(어노테이션)






Annotation(어노테이션)


- 어노테이션은 메타데이터(데이터의 대한 설명)로 볼 수 있다.


- 어노테이션은 컴파일러가 코드의 문법 에러를 체크하도록 정보를 제공해준다.


- 또한, 코드를 보는 사람의 입장에서도 소스 코드가 더욱 직관적이 되도록 만들어준다.






- 어노테이션 예

@Override : 선언한 메서드가 오버라이드 되었다는 것을 나타낸다.


@Deprecated


@SuppressWarnings






'JAVA > 기초' 카테고리의 다른 글

Java String charAt(), indexOf(), length() 등  (0) 2020.03.22
Java Overloading vs. Overriding [오버로딩 vs. 오버라이딩]  (0) 2020.03.19
Java import  (0) 2020.03.18
Java 상수 static final  (0) 2020.03.18
Java Singleton(싱글톤)  (0) 2020.03.17

+ Recent posts