[ITWILL : JAVA]자바접근자 public과 private, 자바 데이터 형태, 모든 연산자들, A++과 ++A의 차이, (조건)? TRUE:FALSE

ITWILL학원 : 2강 JAVA BY 윤미영강사

1. 자바접근자 public와 private

  • public Class A {}
  • private Class A {}

참고링크 : 자바접근자 public과 private차이

private Class는 다른 프로젝트에서 불러오지 못하고 심지어 같은 프로세스안에서도 불러오지 못한다.
이런 private를 왜 쓰는걸까?

실생활예를 들자면, 무인경비시스템의 문을 열고 닫는 시스템이 있다고 생각해보자.
다른 곳에서 해당 프로그램을 불러와서 수정할 수 있다면 에러가 발생해 무인경비 오작동이 일어날지도 모른다
따라서 중요한 파일들을 다른 곳에서 수정할 수 없도록 public이 아닌 private를 쓴다.




2. 자바 데이터 형태

기본데이터형과 참조데이터형은 여러 다른점이있지만 메모리에서도 차이점이 있다
기본데이터형은 실제값을 가지고 참조데이터형은 실제데이터의 주소값을 가진다.

  1. 기본 데이터형

기본데이터형의 메모리는 실제값을 가진다

  • 정수형 int(32비트), long(64비트), short(16비트), byte(8비트 : -128 ~ 127까지 표현가능)

  • 실수형 double(64비트), flote(32비트) : 10.1, 0.0f

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//소수점을 편하게 나타낼수있다.
double d1 = 3.14e-2;
System.out.println(d1); //0.0314


//10승을 편하게 나타낼 수 있다
double d2 = 3.14e2;
System.out.println(d1); //314.0


//float와 double을 비교해보자
float f1 = 0.123456789123456f;
double d3 = 0.123456789123456;

System.out.println(f1); //0.12345679
System.out.println(d3; //0.123456789123456
1
2
3
4
5
6
7
// char로 작은따옴표 하나를 나타내고싶다 -> 역슬러시이용

char c1 = ''' // 에러 Invalid character constant

char c2 = '\'' // '

char c3 = '\\ // \
  • 논리형 boolean형태(각각 8비트) true, false

자바데이터타입

  1. 참조 데이터형 = Class형 = 클래스형
    기본데이터형이 아닌 나머지 데이터형태를 다 참조데이터형, 또 다른 말로는 클래스형이라고 한다.
    참도데이터형의 메모리는 실제 데이터의 주소값을 가진다.

예시

  • 문자열 String : “”
  • Scanner




3. 데이터형변환

형변환은 크게 두가지로 나눌 수 있다

  • 자동형변환(암시적형변환)
    • 따로 설정하지않아도 컴파일러가 자동으로 형을 변환해준다.
    • 할당된 byte가 작은 데이터타입에서 큰 데이터타입으로 변경된다. 반대는 안될것같지만 되는 것들이 있음.
    • ex) char형 -> int형 (유니코드사용 자동형변환), double형 -> int형(값이 손실되더라도 자동형변환)

자동형변환 규칙

  • 명시적형변환
    • Casting 캐스트연산자를 이용해서 변환
    • ex) (double)int -> double , (String)int -> String
1
2
3
4
5
6
7
int count = 128;
byte b = (byte)count;
System.out.println(b); // -128

count = 130;
b = (byte)count;
System.out.println(b); // -126

형변환을 했는데 128이 아닌 -128이 나오고 130이 아닌 -126이 출력되었다
왜그럴까?
명시적형변환의 경우 오류가 발생할 수 있기때문이다




4. 산술연산자

  • 덧셈
  • 뺄셈
  • 나눗셈
  • 곱셈

이 중에서 나눗셈에 주의해야한다. 왜냐하면 예외발생 또는 형변환에 걸릴 수 있기때문에

1
2
3
4
5
6
7
8
9
10
11
12
// 1. 예외발생 ( arithmetic exception )
System.out.println(3/0);
//출력값 : Exception in thread "main" java.lang.ArithmeticException: / by zero

// 2. 형변환문제
int a = 100;
int b = 200;
int result = a/b
System.out.println(result)
//출력값 : 0
System.out.println((double)result)
//출력값 : 0.0

답은 0.5가 나와야하는데 int라는 정수형데이터때문에 0만 출력된다
형변환을 한다고해도 이미 result가 0이기때문에 0을 double하니까 0.0이 된다

해결방법은 변수선언을 double로 해주면 끝!

1
2
3
4
5
6
7
double result = a/(double)b
System.out.println(result)
//출력값 : 0.5

double result = (double)a/b
System.out.println(result)
//출력값 : 0.5




5. 대입연산자

  • =
  • +=
  • =+
  • *=
  • /=

예를들어
a+=b 의 의미는 a = a+b
a/=b 의 의미는 a = a/b




6. 논리연산자

  • & : and연산자
  • | : or연산자
  • ! : not연산자. 반대의 개념
    • ex)!false => true
    • ex)!true => false
  • ^ : nor연산자. 비트연산자 두개의 값이 같으면 false고 다르면 true.
    • 주로 전자제품할때 사용하고 응용sw에서는 사용할일이 적다
    • ex) true ^ false => true
    • ex) true ^ true => false




7. 증감연산자

변수의 앞, 뒤에서 사용하며 값을 1증가 또는 1감소

  1. ++A 또는 –A (전위연산) : 변수의 값을 사용할때 1증가 또는 1감소 실행
  2. A++ 또는 A– (후위연산) : 변수의 값을 먼저 사용하고 나서 1증가 또는 1감소 실행

세미콜론의 위치때문에 1번과 2번의 값이 차이가 생겼다
++A는 A의 값을 변화시키지 않고 콘솔을 찍었고
A++은 A의 값을 1씩 더한 뒤(세미콜론찍고) 콘솔을 찍었다.
즉 변수의 값을 변하시키는 건 A++후위연산이다.




8. 삼항연산자

실무에선 잘 사용하지 않지만 정말 간단한 조건식이 필요할때 사용한다.

1
조건? 값1:값2

풀어서 설명하자면 조건이 true이면 값1이 출력되고 false면 값2가 출력된다

1
2
3
4
5
6
7
8
9
10
11
12
int a = 1
int b = 2;
int c = 4;

//첫번째방법
int max = a>b? a:b;
max = max>c? max:c;
System.out.println(max); //4

//두번째방법
double max2 = (a>b&a>c)? a:(b>c)? b:c ;
System.out.println(max2) //4.0

두번째방법을 쓸 수는 있으나 가독성이 떨어지므로 첫번째방법을 쓰는 것을 추천한다