[core.java] 자바학습(Chapter 3)
Chapter 3. 기본 프로그래밍 구조 in java
3.3 Data Types
: int(byte, int, short, long), float(float, double), char, boolean
float & Bigdecimal
-
F 접두어를 포함하지 않는 floating-point numbers 는 항상 double 타입이다. (3.14 == 3.14D)
-
positive number/0 == positive infinity
0/0 == NaN(not a number)note
if (x == Double.NaN) // is never true
// == 는 객체 레퍼런스 주소 값 비교이기 때문에 항상 false 출력
if (Double.isNaN(x)) // check whether x is "not a number"
// .equals(x) 비교 방식과 동일하게 값을 비교한다.
- float number는 반올림오차(roundoff)가 발생하기 때문에 financial calculation을 하는데 적절하지 않다.
System.out.println(2.0 - 1.1);
// -> 0.899999~
// 예상했던 0.9가 출력되지 않는다.
- BigDecimal 사용해 float의 반올림오차 문제를 해결할 수 있다.
BigDecimal이란?
: BigDecimal은 숫자를 정밀하게 표현할 수 있는 방법이다. (BigInteger 도 있음.)
Java에서 돈과 소수점을 다룬다면 BigDecimal은 선택이 아니라 필수이다.
import java.math.BigDecimal;
public class Main {
public static void main(String args[]) {
double a = 5.001;
double b = 3.000;
System.out.println(a+b);
// 기댓값 : 8.001
// 실제값 : 8.001000000000001
BigDecimal c = new BigDecimal("5.001");
BigDecimal d = new BigDecimal("3.000");
System.out.println(c.add(d)); // 8.001
System.out.println(c.subtract(d));
System.out.println(c.multiply(d));
System.out.println(c.divide(d));
}
}
Promotion & Casting
Promotion
- 자동 형변환(Promotion)
: 자동 형변환은 작은 메모리 크기의 데이터 타입을 큰 메모리 크기의 데이터 타입으로 변환하는 행위를 말합니다.
byte a = 10;
int b = a;
// byte(1) < int(4) 이므로 자동 형변환 가능
- 강제 형변환(Casting)
double x = 9.997;
int nx = (int) x; // x -> double
// nx == 9
- [주의] ex) 정수 값을 문자 값으로 변환할 때 -> 자동 형변환 불가
byte byteValue = 65;
char charValue = byteValue; // -> 컴파일 에러 발생
// byte(1) < char(2) 이므로 char 메모리 크기가 더 크긴 하지만 char의 범위는 0~65535로 음수가 저장될 수 없기에 예제처럼 자동 형변환이 일어날 수 없다.
char charValue2 = (char) byteValue;
// 강제 형변환 실행시 'A' 라는 결과값이 출력된다.
3.6 Strings
Concatenation
ex)
int age = 13;
String rating = "pc"+age;
// rating == "pc13"
Equality Test
: 자바에서 equals() 메서드와 == 연산자를 통해 값을 비교할 수 있습니다.
-
equals() 메서드와 == 연산자를 알아보기 전에, 먼저 CBV, CBR 에 대해 알아보겠습니다.
-
CBV(Call By Value) : 기본적으로 대상에 주소값을 가지지 않는 것으로 값을 할당받는 형태로 사용됩니다. 예를 들어 int, float, char 등 primitive 8개 타입이 해당됩니다.
-
CBR(Call By Reference) : 대상을 선언했을 때 주소값이 부여됩니다 예를 들어 참조형 타입(Array, enum, class, interface, Object 등) 이 있다.
// 기본형을 제외한 모든 타입을 참조형 타입이라고 부릅니다.
-
-
equals() 메서드와 == 연산자의 차이를 알아보겠습니다.
equals() 는 메서드로 객체끼리 내용을 비교합니다.
== 는 비교를 위한 연산자로 비교 대상의 주소값을 비교합니다.
ex)
public class Main {
public static void main(String args[]) {
int a = 1;
System.out.println(a==1); // true
String b = "hello"; // heap 영역의 공통된 객체를 공유하게 된다.
System.out.println(b=="hello"); // 같은 heap 영역을 공유하므로 -> true
System.out.println(b.equals("hello")); // true
String c = new String("hello");
// 새로운 heap 영역을 가지는 String 객체 생성
// -> 즉 b와 c 가 가지는 heap 영역은 다르다.
System.out.println(b==c); // false
}
}
// static, stack, heap 으로 이해하는 것이 더 쉽다.
// url :https://m.blog.naver.com/heartflow89/220954420688
Empty and Null Strings
- String 변수의 empty 여부 확인 방법
if (str.length() == 0)
// or
if (str.equals(""))
String, StringBuffer, StringBuilder
3.7 Input and Output
Formatting Output
- printf
System.out.printf("%.2f", 10000.0 / 3.0);
// 3333.33
System.out.printf(%,.2f", 10000.0 / 3.0);
// 3,333.33
- String format
String name = "Lee Dohun";
int age = 28;
String message = String.format("Hello, %s. Next year, you'll be %d", name, age);
// Hello, Lee Dohun. Next year, you'll be 28
File Input and Output
- Scanner -> 해당 파일 없을 경우, exception 발생
PrintWriter -> 만들 수 없는 파일 이름일 경우, exception 발생
public static void main(String[] args) throws IOException
{
Scanner sc = new Scanner(Paths.get("file.txt", "UTF-8");
}
3.8 Control Flow
continue, break, return 써도 됨?
- 루프에서 제어를 건너뛰는 것은 코드를 이해하기 어렵게 하거나 차후에 버그를 발생시킬 수 있습니다. 이 중 continue() 는 if()의 사용을 통해 해결할 수 있습니다.
if () {
continue;
}
method();
=>
if !() {
method();
}
-
continue, break 의 존재는 위와 같은 문제를 발생시킬 수 있지만, 이를 제거하고자 할 때 코드를 수정할 때 코드의 복잡성이 올라갈 수 있습니다. 양면을 지닌 구문들이기 때문에 코드의 복잡성을 파악하며 사용하는 것이 좋다.
-
return 문은 자원누수(Resource Leak)과 같은 일이 발생할 수 있기 때문에 함수 구현 중 1번만 사용하는 것이 바람직합니다. 하지만 이런 문제가 발생하지 않는다고 가정할 때, return 문을 여러 개 사용하여도 괜찮습니다.
3강. Fundamental Programming Structures in Java 끝
감사합니다.
Author And Source
이 문제에 관하여([core.java] 자바학습(Chapter 3)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dhlee/core.java-자바학습Chapter-3저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)