Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발 한번 해블로그

[Java] 8. 내 나이 2X살, 사고력을 키워보자 본문

Java

[Java] 8. 내 나이 2X살, 사고력을 키워보자

hide on bush 2023. 11. 22. 11:17

갑자기 자바를 공부하는데 사고력이 왜 필요하나..라고 생각 할 수도 있지만 코딱지만큼 공부한 내가 필요하다고 느낄 정도면 필요한거다 ^^! 오늘 내용은 간단한 연산자에 관련된 내용이다. 간단한 것 같지만 실제 코드 짜면서 어버버거리는건 어쩔 수 없다. 

1. 연산자의 종류

  • 단항 연산자
  • 이항 연산자
  • 삼항 연산자
  • 산술 연산자
  • 관계 연산자
  • 논리 연산자
  • 복합대입 연산자

1) 단항 연산자

  • 증가 연산자
    • ++a (전위) : a의 값이 1 증가 → a의 값 사용
    • a++ (후위) : a의 값 사용 → a의 값 1 증가
  • 감소 연산자
    • --a (전위) : a의 값 1 감소 →  a의 값 사용
    • a-- (후위) : a의 값 사용 →  a의 값 1 감소

즉, 전위는 먼저 a의 값을 증가, 감소시킨 후 사용하고 후위는 a를 사용한 후 그 다음에 변수의 값을 증가, 감소시키는 것이다.

public class PrePostOperTest {
    public static void main(String[] args) {
        int x=10;
        System.out.println(--x);
        System.out.println(x++);
        System.out.println(x--);
        System.out.println(++x);
        System.out.println(x);

    }
}

그냥 뭐 더하기, 빼기 아니야? 라고 생각하면 안된다. 
위에 코드의 경우 x 값이 10인 경우 최종적으로 나오는 결과값은 9 9 10 10 10이다. 

System.out.println(--x);  → int x가 10이고 --x이므로 x값을 먼저 1 감소하면 9, 그리고 이 9를 사용(저장)
System.out.println(x++);  → 앞에 코드에서 9가 있으니까 그 9가 x++를 만났으니 9를 먼저 사용해 9가 출력되고 10이 저장
System.out.println(x--);  → 10이 저장, x--를 만났으니 10 출력 후 1 감소 후 9 저장
System.out.println(++x);  → 9가 저장되어있고 ++x를 만나 먼저 9를 10으로 증가 후 출력하고 10 저장
System.out.println(x); -> x값은 앞에 10이 저장 되어 있어 10 출력

처음에는 헷갈릴 수도 있지만 본인 스스로 온전히 이해하면 우리는 1+1=2를 배운셈,,,

 

2) 삼항 연산자

- 연산자의 수가 3개인 삼항 연산자
- (조건식) ? A : B 
- 이 연산자는 그냥 참인지, 거짓인지 비교하는 것이라고 생각하면 쉽다. 보통 절대값이나 둘 중 작은 값, 큰 값을 알아낼 때 사용

삼항 연산식 의미 예시(int a=-5)
(조건식) ? A : B 조건식이 true인 경우, 결과값은 A a<0 ? -a : a -> a가 0보다 작으면 연산 결과는 –a, 그렇지 않으면 a(절대값)
조건식이 false인 경우, 결과값은 B a<b ? a : b -> a가 b보다 작으면 연산 결과는 a, 그렇지 않으면 b (둘 중 작은값)


예시)

public class MaxMinValue {
    public static void main(String[] args) {
        int a=10;
        int b=20;
        // min value
        int min=(a<b) ? a : b;
        System.out.println("min = " + min);

        // max value
        int max=(a>b)?a:b;
        System.out.println("max = " + max);
    }
}

그럼 출력은
min = 10
max = 20
이렇게 나온다.

 

3) 산술 연산자

  • + : 더하기
  • - : 빼기
  • * : 곱하기
  • / : 나누기(몫)
    • 정수 예시 : 11 / 4 = 2
    • 실수 예시 : 11.0 / 4.0 = 2.75
  • % : 나머지
    • 정수 예시 : 11 % 4 = 3
    • 실수 예시 : 11.0 % 4.0 = 오류
    • 즉, 몫은 실수형으로 나눌 수 있지만 나머지를 구하는 연산자에서는 실수로 나눌 수 없다.

예시)

public class ArithmeticOperTest {
    public static void main(String[] args) {
        //나누기와 나머지 연산자의 활용(정수의 자리수 구하기)
        int digit=3625;
        System.out.print(digit%10); //일의 자리
        System.out.print(digit/10%10); //십의 자리
        System.out.print(digit/100%10); //백의 자리
        System.out.print(digit/1000%10); //천의 자리
    }
}

출력하면, 5263이 나온다! 즉, 나누기와 나머지 연산자를 활용하여 정수의 자리수를 구한 것

 

4) 복합대입(산술+대입) 연산자

  • +=
  • -=
  • *=
  • /=
  • %=
  • 즉, 연산자 오른쪽 수식의 값을 왼쪽 변수에 대입하는 것
복합 대입연산자 풀어쓰기
a+=b a=a+b
a-=b a=a-b
a*=b a=a*b
a/=b a=a/b
a%=b a=a%b

 

5) 관계연산자

  • ==
  • !=
  • <
  • <=
  • >
  • >=
  • 왼쪽과 오른쪽의 대소 관계를 비교하는 연산자이며 단독으로 사용하기보다는 조건문 if 등 조건에서 많이 사용됨
  • 연산의 결과는 참 아니면 거짓
관계 연산자 해석
a==b a의 값과 b의 값이 같은가?
a!=b a와 b가 다른가?
a<b a가 b보다 작은가?
a<=b a가 b보다 작거나 같은가?
a>b a가 b보다 큰가?
a>=b a가 b보다 크거나 같은가?

 

6) 논리연산자

  • && : and
  • || : or
  • ! : not
논리 연산자 의미 해석
a&&b 논리곱(and 연산) a,b가 둘 다 참이면 참
그렇지 않으면 거짓
a||b 논리합(or 연산) a,b 중 하나라도 참이면 참
그렇지 않으면 거짓
!a 논리부정(not 연산) a가 참이면 거짓
거짓이면 참


예시)

public class LogicalOperTest {
    public static void main(String[] args) {
        int x=1, y=0;
        System.out.println(!(x>0));
        System.out.println(x>0&&x<3);
        System.out.println(x>0&&y<0);
        System.out.println(x<0||y>=0);
        System.out.println(y<0&&y<-5);

        System.out.println();

        int a=3, b=5;
        System.out.println((a>=3)&&(b<6));
        System.out.println((a!=3)&&(a>2));
        System.out.println((b!=5)||(a==1));
    }
}

출력)

 

잼민이 시절로 돌아간 기분,, 코드를 짜면 어짜피 컴터가 알아서 출력해주겠지만 결과값도 항상 혼자 계산해보면서 답이 틀렸다면 내가 뭔가를 잘못 이해하고 있다는 것,,,
시작한지 얼마되지도 않았는데 실강 들을때마다 네? 예? 뭐라구여? 예?ㅠㅠㅠ 다시 .. 이것만 반복중.. 실강때는 뭔가 진도랑 살짝 안맞는거 같아서 어려운데 뭐 매도 미리 맞으면 낫다고,,, 하하!