코딩쿠의 코드 연대기

Java 연산자 본문

코딩스터디/JAVA스터디

Java 연산자

코딩쿠 2024. 10. 26. 13:40

학습목표

  • 산술 연산자
  • 비트 연산자
  • 관계 연산자
  • 논리 연산자
  • instanceof
  • assignment(=) operator
  • 화살표(->) 연산자
  • 3항 연산자
  • 연산자 우선 순위
  • (optional) Java 13. switch 연산자

산술 연산자

Java에서 산술 연산자는 숫자 데이터를 계산하는 데 사용됩니다. 기본적인 사칙연산(+, -, *, /) 외에도 나머지 연산(%)을 포함하여 총 5가지가 있습니다.

1. 덧셈(+): 두 피연산자를 더합니다.

Java

int sum = 10 + 20; // sum은 30이 됩니다.

2. 뺄셈(-): 첫 번째 피연산자에서 두 번째 피연산자를 뺍니다.

Java

int difference = 30 - 10; // difference는 20이 됩니다.

3. 곱셈(*): 두 피연산자를 곱합니다.

Java

int product = 5 * 4; // product는 20이 됩니다.

4. 나눗셈(/): 첫 번째 피연산자를 두 번째 피연산자로 나눕니다.

Java

int quotient = 10 / 3; // quotient는 3이 됩니다. (정수 나눗셈)
double result = 10.0 / 3; // result는 3.3333333333333335가 됩니다. (실수 나눗셈)

5. 나머지(%): 첫 번째 피연산자를 두 번째 피연산자로 나눈 나머지를 반환합니다.

Java

int remainder = 10 % 3; // remainder는 1이 됩니다.

참고:

  • 정수와 정수의 나눗셈(/)은 결과값도 정수가 됩니다.
  • 실수값을 포함한 나눗셈을 하려면 피연산자 중 하나 이상을 실수형으로 만들어야 합니다.
  • 나머지 연산자(%)는 짝수/홀수 판별, 배수 판별 등에 유용하게 사용됩니다.

추가 정보:

  • 산술 연산자는 ++, -- 와 같은 증감 연산자와 함께 사용될 수 있습니다.
  • 연산자 우선순위에 따라 연산 순서가 결정됩니다. 괄호 ()를 사용하여 연산 순서를 명확하게 지정할 수 있습니다.

출처

  1. https://www.icia.co.kr/community/board/view/2/3/127
  2. 홀수, 짝수 판별하기 : https://velog.io/@donggoo/%ED%99%80%EC%88%98-%EC%A7%9D%EC%88%98-%ED%8C%90%EB%B3%84
  3. 자바 연산자와 연산의 방향 & 우선순위 : https://hongong.hanbit.co.kr/%EC%9E%90%EB%B0%94-%EA%B8%B0%EC%B4%88-%EC%97%B0%EC%82%B0%EC%9E%90-%EC%97%B0%EC%82%B0%EC%9D%98-%EB%B0%A9%ED%96%A5%EA%B3%BC-%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84/#:~:text=%EC%82%B0%EC%88%A0%20%EC%97%B0%EC%82%B0%EC%9E%90%EB%8A%94%20%EC%82%AC%EC%B9%99%EC%97%B0%EC%82%B0%EC%9E%90,%EA%B9%8C%EC%A7%80%20%EC%B4%9D%205%EA%B0%9C%EC%9E%85%EB%8B%88%EB%8B%A4.

비트 연산자

Java 비트 연산자는 정수형 데이터를 비트 단위로 조작하는 연산자입니다.

비트 연산자는 데이터를 이진수 형태로 처리하기 때문에 메모리 공간을 효율적으로 사용하고 연산 속도를 높일 수 있다는 장점이 있습니다. 하지만 비트 연산에 대한 이해가 부족하면 코드를 읽고 이해하기 어려울 수 있습니다.

Java에서 제공하는 비트 연산자는 다음과 같습니다.

1. 비트 AND 연산자 (&): 두 피연산자의 각 비트를 비교하여 둘 다 1인 경우에만 1을 반환하고, 그 외에는 0을 반환합니다.

Java

int result = 5 & 3; // 5(101) & 3(011) = 1(001)

2. 비트 OR 연산자 (|): 두 피연산자의 각 비트를 비교하여 둘 중 하나라도 1인 경우 1을 반환하고, 둘 다 0인 경우에만 0을 반환합니다.

Java

int result = 5 | 3; // 5(101) | 3(011) = 7(111)

3. 비트 XOR 연산자 (^): 두 피연산자의 각 비트를 비교하여 서로 다른 경우에만 1을 반환하고, 같은 경우에는 0을 반환합니다.

Java

int result = 5 ^ 3; // 5(101) ^ 3(011) = 6(110)

4. 비트 NOT 연산자 (~): 피연산자의 각 비트를 반전시킵니다. 0은 1로, 1은 0으로 바꿉니다.

Java

int result = ~5; // ~5(101) = -6(110) (2의 보수 표현)

5. 비트 왼쪽 시프트 연산자 (<<): 피연산자의 비트를 왼쪽으로 지정된 비트 수만큼 이동시킵니다. 오른쪽에 생기는 빈 공간은 0으로 채웁니다.

Java

int result = 5 << 2; // 5(101) << 2 = 20(10100)

6. 비트 오른쪽 시프트 연산자 (>>): 피연산자의 비트를 오른쪽으로 지정된 비트 수만큼 이동시킵니다. 왼쪽에 생기는 빈 공간은 부호 비트로 채웁니다. (음수는 1, 양수는 0)

Java

int result = 5 >> 2; // 5(101) >> 2 = 1(001)

7. 비트 오른쪽 시프트 연산자 (>>>): 피연산자의 비트를 오른쪽으로 지정된 비트 수만큼 이동시킵니다. 왼쪽에 생기는 빈 공간은 항상 0으로 채웁니다.

Java

int result = -5 >>> 2; // -5(11111111111111111111111111111011) >>> 2 = 1073741822(00111111111111111111111111111110)

비트 연산자 활용 예시:

  • 특정 비트 설정 또는 해제
  • 2의 거듭제곱 계산
  • 데이터 압축
  • 암호화

비트 연산자는 다양한 분야에서 활용될 수 있으며, 특히 성능 최적화가 중요한 경우 유용하게 사용됩니다.

출처

  1. 자바에서 비트 연산자 이해하기 : https://f-lab.kr/insight/understanding-bitwise-operators-in-java-20240831
  2. 자바 비트 연산자와 그 활용법 : https://f-lab.kr/insight/java-bitwise-operators-20240831
  3. (자바)자바/연산자/비트연산자 : https://m.blog.naver.com/scyan2011/221639613811
  4. IBM : https://www.ibm.com/docs/ko/i/7.5?topic=expressions-bitwise-operator
  5. 비트 연산자 : https://blog.naver.com/jh20s/221150420782
  6. 비트 XOR 연산자 : https://blog.naver.com/essemparker/221815677396
  7. 비트 연산 : https://blog.naver.com/yuyyulee/221114544260
  8. 비트 연산자 시프트 연산자 : https://colossus-java-practice.tistory.com/19#:~:text=%EC%9D%B4%EC%A0%9C%EB%8A%94%20%EC%8B%9C%ED%94%84%ED%8A%B8%20%EC%97%B0%EC%82%B0%EC%9E%90%20%3E%3E%EB%A5%BC%20%EC%8B%A4%ED%96%89%ED%95%B4%EB%B3%B4%EA%B2%A0%EB%8B%A4.&%EB%A5%BC%20%EC%8B%A4%ED%96%89%ED%95%98%EB%A9%B4%20%EB%8B%A4%EC%9D%8C%EA%B3%BC%20%EA%B0%99%EC%9D%B4%20%EB%B3%80%ED%95%98%EA%B2%8C%20%EB%90%9C%EB%8B%A4.&%EB%B9%84%ED%8A%B8%20%EC%A0%84%EC%B2%B4%EB%A5%BC%20%EC%98%A4%EB%A5%B8%EC%AA%BD%EC%9C%BC%EB%A1%9C,%EC%8B%9C%ED%82%A4%EB%8A%94%20%EB%8F%99%EC%9E%91%EC%9D%84%20%ED%95%98%EA%B2%8C%20%EB%90%9C%EB%8B%A4.
  9. 자바로 알아보는 비트 연산, 시프트 연산 : https://blog.thecloer.com/74
  10. 비트 연산의 효율성과 그 원리 : https://f-lab.kr/insight/bit-operation-efficiency-and-principles

관계 연산자

Java 관계 연산자는 두 피연산자를 비교하여 그 결과를 boolean 값(true 또는 false)으로 반환하는 연산자입니다. 주로 조건문이나 반복문에서 조건식을 구성하는 데 사용됩니다.

Java에서 제공하는 관계 연산자는 다음과 같습니다.

연산자 설명 예시 결과
== 두 피연산자가 같은지 비교합니다. 5 == 5 true
!= 두 피연산자가 다른지 비교합니다. 5 != 3 true
> 왼쪽 피연산자가 오른쪽 피연산자보다 큰지 비교합니다. 5 > 3 true
< 왼쪽 피연산자가 오른쪽 피연산자보다 작은지 비교합니다. 5 < 3 false
>= 왼쪽 피연산자가 오른쪽 피연산자보다 크거나 같은지 비교합니다. 5 >= 5 true
<= 왼쪽 피연산자가 오른쪽 피연산자보다 작거나 같은지 비교합니다. 5 <= 3 false

주의 사항:

  • =는 대입 연산자이고, ==는 비교 연산자입니다. 두 연산자를 혼동하지 않도록 주의해야 합니다.
  • 관계 연산자는 기본 데이터 타입(int, double, char 등) 뿐만 아니라 객체 참조 타입에도 사용할 수 있습니다. 객체 참조 타입에 사용하는 경우, 두 객체가 같은 객체를 참조하는지 비교합니다.

활용 예시:

Java

int num1 = 10;
int num2 = 5;

if (num1 > num2) {
  System.out.println("num1이 num2보다 큽니다.");
}

if (num1 == num2) {
  System.out.println("num1과 num2는 같습니다.");
} else {
  System.out.println("num1과 num2는 다릅니다.");
}

관계 연산자는 논리 연산자와 함께 사용하여 복잡한 조건식을 만들 수 있습니다.

Java

int age = 25;
boolean isAdult = age >= 18;

if (isAdult && age < 30) {
  System.out.println("20대 성인입니다.");
}

출처

  1. YJ Dev 자바의 논리 연산자 : https://creativevista.tistory.com/entry/Java%EC%9E%90%EB%B0%94-%EB%85%BC%EB%A6%AC-%EC%97%B0%EC%82%B0%EC%9E%90-%EC%A1%B0%EA%B1%B4%EB%AC%B8%EC%9D%84-%EB%8D%94%EC%9A%B1-%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9C%BC%EB%A1%9C-%EC%9E%91%EC%84%B1%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95#:~:text=2.,%2C%20while)%EC%97%90%EC%84%9C%20%EC%82%AC%EC%9A%A9%EB%90%A9%EB%8B%88%EB%8B%A4.
  2. 자바 연산자 총 정리 : https://m.blog.naver.com/minsuuuus/222220071854
  3. 인프런 Q&A : https://www.inflearn.com/community/questions/1411491/%EB%8F%99%EB%93%B1-%EC%97%B0%EC%82%B0%EC%9E%90-%EA%B0%9D%EC%B2%B4-%EB%B9%84%EA%B5%90-%EC%A7%88%EB%AC%B8논리 연산자

Java 논리 연산자는 boolean 값(true 또는 false)을 피연산자로 받아 논리 연산을 수행하고, 그 결과를 다시 boolean 값으로 반환하는 연산자입니다. 주로 조건문이나 반복문에서 여러 조건을 결합하여 복잡한 조건식을 구성할 때 사용됩니다.

Java에서 제공하는 논리 연산자는 다음과 같습니다.

연산자 설명 예시 결과
&& 논리 AND 연산자. 두 피연산자가 모두 true인 경우에만 true를 반환합니다. true && true true
|| 논리 OR 연산자. 두 피연산자 중 하나라도 true인 경우 true를 반환합니다.    
! 논리 NOT 연산자. 피연산자의 값을 반전합니다. true는 false로, false는 true로 바꿉니다. !true false
& 비트 AND 연산자. 두 피연산자를 비트 단위로 비교하여 AND 연산을 수행합니다. true & false false
| 비트 OR 연산자. 두 피연산자를 비트 단위로 비교하여 OR 연산을 수행합니다. `true \  
^ 비트 XOR 연산자. 두 피연산자를 비트 단위로 비교하여 XOR 연산을 수행합니다. true ^ true false

&& 와 & / || 와 | 의 차이점:

  • &&||단락 평가(short-circuit evaluation)를 수행합니다. 즉, 첫 번째 피연산자에서 결과가 확정되면 두 번째 피연산자는 평가하지 않습니다.
    • && 의 경우, 첫 번째 피연산자가 false 이면 두 번째 피연산자를 평가하지 않고 false 를 반환합니다.
    • || 의 경우, 첫 번째 피연산자가 true 이면 두 번째 피연산자를 평가하지 않고 true 를 반환합니다.
  • &|두 피연산자를 항상 평가합니다.

활용 예시:

Java

int age = 25;
boolean isAdult = age >= 18;
boolean hasLicense = true;

if (isAdult && hasLicense) {
  System.out.println("운전이 가능합니다.");
}

if (age < 13 || age >= 65) {
  System.out.println("요금 할인 대상입니다.");
}

boolean isRaining = false;
if (!isRaining) {
  System.out.println("오늘은 비가 오지 않습니다.");
}

논리 연산자는 조건문과 반복문에서 복잡한 조건을 표현하는 데 유용하게 사용됩니다. 또한, 비트 연산자와 함께 사용하여 비트 단위의 논리 연산을 수행할 수도 있습니다.

출처

  1. JAVA RUSH_java의 논리 연산자 : https://javarush.com/ko/groups/posts/ko.2344.java--
  2. 자바의 기본 조건문 : https://keepgoingforever.tistory.com/33#google_vignette
  3. 자바 논리 연산자 : https://www.freecodecamp.org/korean/news/java-yeonsanja-and-or-nonri-yeonsanja/#:~:text=Java%20%EC%97%B0%EC%82%B0%EC%9E%90%20%E2%80%93%20%26%2C%20%26%26%20(,)%20%7C%7C%20(OR)%20%EB%85%BC%EB%A6%AC%20%EC%97%B0%EC%82%B0%EC%9E%90
  4. 마이크로소프트 : https://learn.microsoft.com/ko-kr/power-automate/desktop-flows/how-to/logical-operations-conditional-statements
  5. 논리연산자 : https://tomining.tistory.com/150#:~:text=Java%EC%97%90%EC%84%9C%EB%8A%94%20%EB%B9%84%ED%8A%B8%20%EC%97%B0%EC%82%B0%EC%9E%90%EB%A5%BC%20%EB%85%BC%EB%A6%AC%20%EC%97%B0%EC%82%B0%EC%9E%90%EB%A1%9C%20%EC%82%AC%EC%9A%A9%EC%9D%B4%20%EA%B0%80%EB%8A%A5%ED%95%A9%EB%8B%88%EB%8B%A4.instanceof

Java의 instanceof 연산자는 객체가 특정 클래스의 인스턴스인지 또는 특정 인터페이스를 구현했는지 확인하는 데 사용됩니다.

사용 방법:

Java

object instanceof class/interface
  • object: 검사할 객체
  • class/interface: 객체가 속하는지 확인할 클래스 또는 인터페이스

결과:

  • 객체가 지정된 클래스의 인스턴스이거나 지정된 인터페이스를 구현한 경우 true를 반환합니다.
  • 그렇지 않은 경우 false를 반환합니다.

예시:

Java

String str = "Hello";
System.out.println(str instanceof String); // true

Object obj = new Integer(123);
System.out.println(obj instanceof Integer); // true
System.out.println(obj instanceof Number); // true (Integer는 Number의 하위 클래스)
System.out.println(obj instanceof String); // false

List<String> list = new ArrayList<>();
System.out.println(list instanceof List); // true
System.out.println(list instanceof ArrayList); // true
System.out.println(list instanceof Collection); // true (List는 Collection 인터페이스를 구현)

활용:

  • 객체의 타입을 확인하여 적절한 처리를 수행할 때 유용합니다.
  • 다형성을 활용하는 코드에서 객체의 실제 타입을 확인하고 그에 맞는 메서드를 호출할 때 사용됩니다.
  • instanceof 연산자는 클래스의 상속 관계를 고려합니다. 즉, 객체가 특정 클래스의 인스턴스이면 해당 클래스의 상위 클래스의 인스턴스이기도 합니다.

주의 사항:

  • null 참조는 어떤 클래스의 인스턴스도 아니므로 instanceof 연산자를 사용하면 항상 false를 반환합니다.
  • instanceof 연산자는 런타임에 객체의 타입을 검사하므로 성능에 약간의 영향을 미칠 수 있습니다. 따라서 과도한 사용은 피하는 것이 좋습니다.

Java 14부터 추가된 패턴 매칭 기능을 사용하면 instanceof 연산자를 더욱 효과적으로 사용할 수 있습니다.

Java

if (obj instanceof String str) {
  // obj가 String 타입인 경우, str 변수에 obj를 캐스팅하여 사용할 수 있습니다.
  System.out.println(str.length()); 
}

이처럼 instanceof 연산자는 Java에서 객체의 타입을 검사하고 처리하는 데 유용한 도구입니다.

출처

  1. https://m.blog.naver.com/kgw1988/221979302709
  2. instanceof의 의미 : https://www.inflearn.com/community/questions/907725/instanceof%EC%9D%98-%EC%9D%98%EB%AF%B8

Java에서 instanceof는 객체가 특정 클래스의 인스턴스이거나 특정 인터페이스를 구현했는지 확인하는 데 사용되는 연산자입니다. 쉽게 말해, 어떤 객체가 특정 타입에 속하는지 확인하는 데 사용됩니다.

사용 방법:

Java

object instanceof class/interface
  • object: 검사할 객체
  • class/interface: 객체가 속하는지 확인할 클래스 또는 인터페이스

결과:

  • 객체가 지정된 클래스의 인스턴스이거나 지정된 인터페이스를 구현한 경우 true를 반환합니다.
  • 그렇지 않은 경우 false를 반환합니다.

예시:

Java

String str = "Hello";
System.out.println(str instanceof String); // true

Object obj = new Integer(123);
System.out.println(obj instanceof Integer); // true
System.out.println(obj instanceof Number); // true (Integer는 Number의 하위 클래스)
System.out.println(obj instanceof String); // false

List<String> list = new ArrayList<>();
System.out.println(list instanceof List); // true
System.out.println(list instanceof ArrayList); // true
System.out.println(list instanceof Collection); // true (List는 Collection 인터페이스를 구현)

활용:

  • 객체의 타입을 확인하여 적절한 처리를 수행할 때 유용합니다. 예를 들어, 객체가 특정 클래스의 인스턴스인 경우에만 특정 메서드를 호출해야 하는 경우 instanceof를 사용하여 타입을 검사할 수 있습니다.
  • 다형성을 활용하는 코드에서 객체의 실제 타입을 확인하고 그에 맞는 메서드를 호출할 때 사용됩니다. 상위 클래스 타입의 변수에 다양한 하위 클래스 객체가 할당될 수 있는 경우, instanceof를 사용하여 객체의 실제 타입을 확인하고 적절한 메서드를 호출할 수 있습니다.
  • instanceof 연산자는 클래스의 상속 관계를 고려합니다. 즉, 객체가 특정 클래스의 인스턴스이면 해당 클래스의 상위 클래스의 인스턴스이기도 합니다.

주의 사항:

  • null 참조는 어떤 클래스의 인스턴스도 아니므로 instanceof 연산자를 사용하면 항상 false를 반환합니다.
  • instanceof 연산자는 런타임에 객체의 타입을 검사하므로 성능에 약간의 영향을 미칠 수 있습니다. 따라서 과도한 사용은 피하는 것이 좋습니다.

Java 14부터 추가된 패턴 매칭 기능을 사용하면 instanceof 연산자를 더욱 효과적으로 사용할 수 있습니다.

Java

if (obj instanceof String str) {
  // obj가 String 타입인 경우, str 변수에 obj를 캐스팅하여 사용할 수 있습니다.
  System.out.println(str.length()); 
}

이처럼 instanceof 연산자는 Java에서 객체의 타입을 검사하고 처리하는 데 유용한 도구입니다. 객체 지향 프로그래밍의 핵심 개념인 다형성을 활용하는 코드에서 특히 유용하게 사용됩니다.


대입 연산자 assignment(=) operator

Java에서 대입 연산자 =는 변수에 값을 할당하는 데 사용됩니다. 즉, = 오른쪽에 있는 값을 왼쪽에 있는 변수에 저장합니다.

기본적인 사용법

Java

변수 = 값;
  • 변수: 값을 저장할 변수의 이름입니다.
  • : 변수에 저장할 값입니다. 값은 리터럴, 다른 변수, 또는 표현식이 될 수 있습니다.

예시

Java

int age = 30;       // 정수형 변수 age에 30을 할당합니다.
String name = "John";  // 문자열 변수 name에 "John"을 할당합니다.
double pi = 3.14159; // 실수형 변수 pi에 3.14159를 할당합니다.

int a = 10;
int b = 20;
int c = a + b;  // 변수 c에 a + b의 결과값인 30을 할당합니다.

주의 사항

  • Java는 변수를 사용하기 전에 초기화해야 합니다. 즉, 변수를 선언한 후 처음으로 값을 할당해야 합니다. 그렇지 않으면 컴파일 에러가 발생합니다.
  • 대입 연산자는 오른쪽에서 왼쪽으로 실행됩니다. 즉, = 오른쪽에 있는 값이 먼저 계산된 후 왼쪽에 있는 변수에 할당됩니다.
  • 대입 연산자는 다른 연산자와 결합하여 복합 대입 연산자를 만들 수 있습니다.

복합 대입 연산자

복합 대입 연산자는 대입 연산자 =와 다른 연산자를 결합하여 코드를 간결하게 작성할 수 있도록 도와줍니다.

연산자 설명 예시 동일한 표현
+= 덧셈 후 대입 x += 5; x = x + 5;
-= 뺄셈 후 대입 y -= 3; y = y - 3;
*= 곱셈 후 대입 z *= 2; z = z * 2;
/= 나눗셈 후 대입 a /= 4; a = a / 4;
%= 나머지 연산 후 대입 b %= 3; b = b % 3;

예시

Java

int x = 10;
x += 5;  // x는 15가 됩니다. (x = x + 5 와 동일)

int y = 20;
y -= 7;  // y는 13이 됩니다. (y = y - 7 와 동일)

대입 연산자와 비교 연산자의 차이

대입 연산자 =는 변수에 값을 할당하는 데 사용되고, 비교 연산자 ==는 두 값이 같은지 비교하는 데 사용됩니다. 두 연산자를 혼동하지 않도록 주의해야 합니다.

결론

대입 연산자는 Java 프로그래밍에서 가장 기본적이고 자주 사용되는 연산자 중 하나입니다. 변수에 값을 할당하고, 복합 대입 연산자를 통해 간결하게 코드를 작성할 수 있도록 도와줍니다.

출처

  1. JAVA RUSH_자바 할당 및 초기화 : https://javarush.com/ko/groups/posts/ko.609.java---
  2. 자바 변수 및 대입연산자 : https://byeong9935.tistory.com/59#:~:text=%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%84%A0%EC%96%B8%ED%95%98%EB%A9%B4%EC%84%9C%20%EC%A0%81%EC%A0%88%ED%95%9C,%EA%B3%BC%20%ED%95%A8%EA%BB%98%20%EC%82%AC%EC%9A%A9%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.
  3. https://blog.naver.com/gogo0792/10165347124
  4. https://creativevista.tistory.com/entry/Java%EC%9E%90%EB%B0%94-%EB%8C%80%EC%9E%85-%EC%97%B0%EC%82%B0%EC%9E%90%EC%9D%98-%EB%AA%A8%EB%93%A0-%EA%B2%83-%EA%B8%B0%EC%B4%88%EB%B6%80%ED%84%B0-%EC%9D%91%EC%9A%A9%EA%B9%8C%EC%A7%80-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0#google_vignette

화살표(->) 연산자

Java에서 화살표 연산자 ->람다 표현식에서 사용됩니다. 람다 표현식은 Java 8부터 도입된 기능으로, 익명 함수를 간결하게 표현하는 방법입니다.

람다 표현식의 기본 구조:

Java

(매개변수) -> { 실행문; }
  • (매개변수): 람다 표현식에 전달되는 매개변수를 선언합니다.
  • ->: 매개변수와 실행문을 구분하는 화살표 연산자입니다.
  • { 실행문; }: 람다 표현식이 실행할 코드 블록입니다.

예시:

Java

// 람다 표현식을 사용하지 않은 경우
Runnable runnable = new Runnable() {
  @Override
  public void run() {
    System.out.println("Hello, world!");
  }
};

// 람다 표현식을 사용한 경우
Runnable runnable = () -> System.out.println("Hello, world!");

위 예시에서 () -> System.out.println("Hello, world!"); 부분이 람다 표현식입니다.

화살표 연산자의 역할:

화살표 연산자는 람다 표현식에서 매개변수 목록과 실행문을 구분하는 역할을 합니다. 즉, 화살표 왼쪽에는 람다 표현식의 입력 값을 나타내는 매개변수 목록이 오고, 오른쪽에는 람다 표현식의 실행 코드가 옵니다.

람다 표현식의 장점:

  • 코드를 간결하게 작성할 수 있습니다.
  • 익명 클래스를 사용하는 것보다 가독성이 좋습니다.
  • 함수형 인터페이스를 구현하는 데 유용합니다.

람다 표현식과 함수형 인터페이스:

람다 표현식은 함수형 인터페이스와 함께 사용됩니다. 함수형 인터페이스는 단 하나의 추상 메서드만 선언된 인터페이스입니다. 람다 표현식은 함수형 인터페이스의 추상 메서드를 구현하는 데 사용될 수 있습니다.

예시:

Java

@FunctionalInterface
interface MyInterface {
  void myMethod(int a, int b);
}

MyInterface myInterface = (a, b) -> System.out.println(a + b);

위 예시에서 MyInterface는 함수형 인터페이스이고, (a, b) -> System.out.println(a + b)myMethod 메서드를 구현하는 람다 표현식입니다.

결론:

Java에서 화살표 연산자 ->는 람다 표현식에서 매개변수 목록과 실행문을 구분하는 역할을 합니다. 람다 표현식은 익명 함수를 간결하게 표현하는 방법이며, 함수형 인터페이스를 구현하는 데 유용하게 사용됩니다.

출처

  1. 자바의 람다 표현식과 함수형 인터페이스 이해하기 : https://f-lab.kr/insight/understanding-lambda-expressions-and-functional-interfaces-in-java
  2. 람다 표현식 : https://velog.io/@heoseungyeon/%EB%9E%8C%EB%8B%A4-%ED%91%9C%ED%98%84%EC%8B%9D#:~:text=4)%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%20%ED%99%94%EC%82%B4%ED%91%9C%20(%E2%86%92,%EB%AA%B8%EC%B2%B4%EB%A5%BC%20%EA%B0%80%EB%A6%AC%ED%82%AC%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.
  3. 코드 가독성 높이는 자바 람다식과 함수형 인터페이스 : https://yozm.wishket.com/magazine/detail/2023/#:~:text=%EC%A6%89%2C%20%EC%9E%90%EB%B0%94%20%EB%9E%8C%EB%8B%A4%EC%8B%9D%EC%9D%84,%EC%A0%81%EC%9A%A9%ED%95%A0%20%EC%88%98%20%EC%9E%88%EA%B2%8C%20%EB%90%98%EC%97%88%EC%8A%B5%EB%8B%88%EB%8B%A4.
  4. 자바에서의 람다 표현식과 함수형 인터페이스의 활용 : https://f-lab.kr/insight/utilizing-lambda-expressions-and-functional-interfaces-in-java
  5. 함수형 인터페이스(Functional Interface) 정리 : https://ykh6242.tistory.com/entry/함수형-인터페이스Functional-Interface-정리
  6. 람다표현식 자주 쓰이는 함수들 : https://modulabs.co.kr/blog/lambda_map_filter_reduce/#:~:text=%EB%9E%8C%EB%8B%A4%20%ED%91%9C%ED%98%84%EC%8B%9D(lambda%20expression)%EC%9D%80,%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9E%85%EB%8B%88%EB%8B%A4.

3항 연산자

Java의 3항 연산자는 조건 연산자라고도 불리며, 간단한 if-else 문을 한 줄로 표현할 수 있게 해주는 연산자입니다.

기본 구조:

Java

조건식 ? 값1 : 값2
  • 조건식: true 또는 false를 반환하는 표현식입니다.
  • 값1: 조건식이 true일 때 반환되는 값입니다.
  • 값2: 조건식이 false일 때 반환되는 값입니다.

동작 방식:

  1. 먼저 조건식을 평가합니다.
  2. 조건식이 true이면 값1을 결과로 반환합니다.
  3. 조건식이 false이면 값2를 결과로 반환합니다.

예시:

Java

int age = 20;
String adult = age >= 18 ? "성인" : "미성년자";
System.out.println(adult); // 출력: 성인

int num1 = 10;
int num2 = 20;
int max = (num1 > num2) ? num1 : num2;
System.out.println(max); // 출력: 20

장점:

  • 간단한 조건문을 한 줄로 표현하여 코드를 간결하게 만들 수 있습니다.
  • if-else 문보다 가독성이 좋을 수 있습니다.

단점:

  • 복잡한 조건식에는 사용하기 어려울 수 있습니다.
  • 중첩된 3항 연산자는 가독성을 떨어뜨릴 수 있습니다.

활용:

  • 변수에 값을 할당할 때 조건에 따라 다른 값을 할당해야 하는 경우
  • 메서드의 반환 값을 결정할 때 조건에 따라 다른 값을 반환해야 하는 경우
  • 간단한 조건에 따라 UI 요소의 속성을 변경해야 하는 경우

주의 사항:

  • 3항 연산자는 값을 반환하는 표현식이므로, 단순히 조건에 따라 코드 블록을 실행해야 하는 경우에는 if-else 문을 사용하는 것이 더 적합합니다.
  • 3항 연산자를 과도하게 사용하거나 중첩하면 코드의 가독성이 떨어질 수 있으므로 주의해야 합니다.

결론:

3항 연산자는 간단한 조건문을 간결하게 표현할 수 있는 유용한 도구이지만, 복잡한 조건이나 중첩된 사용은 피하는 것이 좋습니다. 적절하게 사용하면 코드의 가독성과 효율성을 높일 수 있습니다.

출처

  1. java 삼항연산자를 사용하는 이유와 사용법 : https://www.icia.co.kr/community/board/view/2/3/126#:~:text=1.%20%EC%82%BC%ED%95%AD%EC%97%B0%EC%82%B0%EC%9E%90%EB%8A%94%20%EA%B0%84%EB%8B%A8%ED%95%9C,%EC%9D%84%20%EB%86%92%EC%9D%BC%20%EB%95%8C%20%EC%82%AC%EC%9A%A9%ED%95%9C%EB%8B%A4.&if%20%EC%A1%B0%EA%B1%B4%EB%AC%B8%EC%9D%84%20%EA%B0%84%EA%B2%B0%ED%95%98%EA%B2%8C%20%EC%A4%84%EC%9D%B4%EA%B3%A0%20%EC%8B%B6%EC%9D%84%20%EB%95%8C%EB%8A%94%20%EC%82%BC%ED%95%AD%EC%97%B0%EC%82%B0%EC%9E%90%20%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0!
  2. 프로그래밍에서 삼항 연산자란 무엇인가? : https://www.lenovo.com/kr/ko/glossary/ternary-operator/?orgRef=https%253A%252F%252Fgemini.google.com%252F

연산자 우선 순위

Java 연산자 우선순위는 여러 연산자가 하나의 표현식에 함께 사용될 때 어떤 연산자가 먼저 실행될지를 결정하는 규칙입니다. 이는 수학에서의 연산 순서와 유사하며, 곱셈과 나눗셈이 덧셈과 뺄셈보다 먼저 수행되는 것처럼 Java에서도 연산자 간의 우선순위가 존재합니다.

Java 연산자 우선순위는 다음과 같습니다. (우선순위가 높은 순서대로)

우선순위 연산자 설명 결합 방향
1 () [] . 괄호, 배열 요소 접근, 멤버 접근 왼쪽에서 오른쪽
2 ++ -- 후위 증감 연산자 왼쪽에서 오른쪽
3 ++ -- + - ! ~ (type) 전위 증감 연산자, 단항 플러스, 단항 마이너스, 논리 부정, 비트 NOT, 형변환 오른쪽에서 왼쪽
4 * / % 곱셈, 나눗셈, 나머지 왼쪽에서 오른쪽
5 + - 덧셈, 뺄셈 왼쪽에서 오른쪽
6 << >> >>> 비트 시프트 왼쪽에서 오른쪽
7 < <= > >= instanceof 관계 연산자 왼쪽에서 오른쪽
8 == != 동등 비교, 부등 비교 왼쪽에서 오른쪽
9 & 비트 AND 왼쪽에서 오른쪽
10 ^ 비트 XOR 왼쪽에서 오른쪽
11 | 비트 OR  
12 && 논리 AND 왼쪽에서 오른쪽
13 ||    
14 ? : 삼항 연산자 오른쪽에서 왼쪽
15 = += -= *= /= %= 대입 연산자 오른쪽에서 왼쪽

참고:

  • 괄호 ()를 사용하여 연산 순서를 명시적으로 지정할 수 있습니다. 괄호 안의 표현식이 가장 먼저 계산됩니다.
  • 동일한 우선순위를 가진 연산자는 결합 방향에 따라 실행 순서가 결정됩니다. 대부분의 연산자는 왼쪽에서 오른쪽으로 결합하지만, 단항 연산자와 대입 연산자는 오른쪽에서 왼쪽으로 결합합니다.
  • 연산자 우선순위를 암기하는 것보다 괄호를 사용하여 연산 순서를 명확하게 표현하는 것이 좋습니다. 이렇게 하면 코드의 가독성을 높이고 오류를 예방할 수 있습니다.

예시:

Java

int result = 10 + 2 * 5; // result는 20이 됩니다. (곱셈이 먼저 수행)
int result2 = (10 + 2) * 5; // result2는 60이 됩니다. (괄호 안의 덧셈이 먼저 수행)

결론:

Java 연산자 우선순위는 코드의 실행 결과에 큰 영향을 미치므로, 정확하게 이해하고 있어야 합니다. 괄호를 사용하여 연산 순서를 명확하게 표현하면 코드의 가독성을 높이고 오류를 예방할 수 있습니다.

(optional) Java 13. switch 연산자

Java 13에서는 switch 문에 몇 가지 새로운 기능이 추가되어 더욱 강력하고 간결하게 사용할 수 있게 되었습니다. 이러한 변경 사항은 "switch 표현식"이라고도 불리며, 기존의 switch 문을 더욱 유연하고 효율적으로 사용할 수 있도록 개선되었습니다.

주요 변경 사항:

  1. 화살표 표기법 (->): case 레이블 뒤에 콜론(:) 대신 화살표(->)를 사용하여 값을 반환하거나 코드 블록을 실행할 수 있습니다.
     int numLetters = switch (day) {
         case MONDAY, FRIDAY, SUNDAY -> 6;
         case TUESDAY                -> 7;
         case THURSDAY, SATURDAY     -> 8;
         case WEDNESDAY              -> 9;
     };
  2. Java
  3. yield 키워드: switch 표현식에서 값을 반환하기 위해 yield 키워드를 사용할 수 있습니다.
     int numLetters = switch (day) {
         case MONDAY, FRIDAY, SUNDAY -> {
             yield 6; 
         }
         case TUESDAY -> {
             yield 7; 
         }
         // ...
     };
  4. Java
  5. 여러 레이블: 하나의 case 레이블에 여러 값을 지정할 수 있습니다.
     case MONDAY, FRIDAY, SUNDAY -> 6;
  6. Java

장점:

  • 간결성: break 문을 사용하지 않아도 되므로 코드가 더 간결해집니다.
  • 가독성: 화살표 표기법을 사용하여 코드의 흐름을 더 명확하게 보여줍니다.
  • 유연성: switch 표현식을 변수에 직접 할당하거나 메서드의 반환 값으로 사용할 수 있습니다.
  • 안전성: break 문 누락으로 인한 오류를 방지할 수 있습니다.

예시:

Java

String day = "MONDAY";
int numLetters = switch (day) {
    case "MONDAY", "FRIDAY", "SUNDAY" -> 6;
    case "TUESDAY" -> 7;
    case "THURSDAY", "SATURDAY" -> 8;
    case "WEDNESDAY" -> 9;
    default -> throw new IllegalStateException("Unexpected value: " + day);
};
System.out.println(numLetters); // 출력: 6

참고:

  • Java 12에서 switch 표현식은 프리뷰 기능으로 도입되었으며, Java 13에서 정식 기능으로 추가되었습니다.
  • switch 표현식은 기존의 switch 문과 함께 사용할 수 있습니다.
  • yield 키워드는 switch 표현식 내에서만 사용할 수 있습니다.

Java 13의 switch 연산자는 기존 switch 문의 단점을 보완하고 더욱 다양한 방식으로 활용할 수 있도록 개선된 기능입니다. 이를 통해 코드를 더욱 간결하고 효율적으로 작성할 수 있습니다.

출처

  1. https://creativevista.tistory.com/entry/Java%EC%9E%90%EB%B0%94-switch-%EB%AC%B8-%EC%A1%B0%EA%B1%B4%EB%AC%B8%EC%9D%98-%EA%B0%95%EB%A0%A5%ED%95%9C-%EB%8C%80%EC%95%88#:~:text=switch%20expression%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%A9%B4,%EC%9D%BD%EA%B8%B0%20%EC%89%BD%EA%B2%8C%20%EB%A7%8C%EB%93%A4%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.