-
3주차 과제: 연산자프로그래밍 언어/Java 2021. 1. 15. 00:00
1.산술 연산자
위 표에서 보다시피 자바는 기본적으로 우리가 모두 알고 있는 사칙연산을 모두 제공하고 있다. 걔중 못 보던게 있다면 '%' 기호일텐데
각 연산자에 대한 설명을 차례대로 하자면,
더하기(+)
public class LiveStudy { public static void main(String[] args) { int result1 = 1 + 2; // result1 is now 3 System.out.println("1 + 2 = " + result1); // 1 + 2 = 3 double result2 = result1 + 0.2; // result2 is now 3.2 System.out.println("3 + 0.2 = " + result2);// 3 + 0.2 = 3.2 // 더하기 연산자의 다른 사용법 String a = "Live Study"; String b = " is "; String c = "Good!"; String d = a + b + c; System.out.println(d); // Live Study is Good! } }
더하기 연산자는 흔히 알 수 있는 정수, 실수의 값을 합하는 연산자다. 또한 문자열과 문자열을 합쳐주는 역할을 하기도 한다.
뺴기(-) 곱하기(*) 나누기(/)
public class LiveStudy { public static void main(String[] args) { int a = 10 - 2; System.out.println("10 - 2 = " + a); // 10 - 2 = 8 int b = a * 2; System.out.println("8 * 2 = " + b); // 8 * 2 = 16 int c = b / 8; System.out.println("16 / 8 = " + c); // 16 / 8 = 2 int d = b / 9; System.out.println("16 / 1 = " + d); // 16 / 9 = 1 } }
다른 연산자의 경우 일반적으로 우리가 알고 있는 사칙연산의 기능과 동일하게 작동하고 있는데, 코드의 가장 밑의 나누기 연산자의 경우 나머지는
반환하지 않고 몫만 반환하는 것을 알 수 있다. 그렇다면 나머지는 어떻게 구할 수 있을까?
나머지(%)
public class LiveStudy { public boolean evenNumber(int a){ if (a % 2 == 0){ // 매개변수를 2로 나눴을 때 나머지가 0 일경우 짝수 return true; // true 반환 } return false; // false 반환 } public static void main(String[] args) { LiveStudy s = new LiveStudy(); System.out.println(s.evenNumber(2)); // true } }
나머지 연산자는 나누기 연산자와 동일하게 양 쪽의 값을 나누되 나머지만을 반환한다. 이를 활용하여 짝수와 홀수를 판별하는 코드를 작성해봤다.
2.비트 연산자
위 비트연산자를 사용하면 정수의 값을 비트로 바꿔 논리연산을 할 수 있다. 또, '>>', '<<', '>>>' 비트 쉬프트 연산을 하여 비트 자리수를
이동시킨다.
public class LiveStudy { public static void main(String[] args) { System.out.println(5 ^ 1); //0b0101 ^ 0b0001 = 0b0100 (4) System.out.println(2 & 3); //0b0010 & 0b0011 = 0b0010 (2) System.out.println(5 | 7); //0b0101 & 0b0111 = 0b0111 (7) System.out.println(5 >> 1); //0b0101 = 0b0010 (2) System.out.println(5 << 1); //0b0101 = 0b1010 (10) System.out.println(~15); //0b01111 = 0b10000 (-16) } }
학교에서 논리회로를 들어봤으면 쉽게 이해되는 부분이라고 생각된다. 재밋는건 이번 포스팅은 거의 Java Tutorial을 보면서 작성하고 있는데
튜토리얼에서 조차 일반적으로 잘 사용하지 않는다고 명시되어있다..?? 튜토리얼인데 이렇게 말해도 되는건가 아무튼, 익혀두면 나쁠건 없는 것 같다.
19년도 카카오 코딩테스트에 비트연산 문제가 나왔었다.
3.관계 연산자
관계 연산자는 양 쪽의 값을 비교할 때 사용하며 boolean 으로 반환을 한다.
4.논리 연산자
논리 연산자는 위에서 다룬 비트 연산자와 거의 동일하게 AND, OR 논리비교를 하는데 비트연산자의 경우 각 정수, 비트의 값을
연산하는 것과 달리 True, False 값의 Boolean Type의 값을 비교하는 연산자다. 유의해야할 것으론 '&&', '&' 의 차이 '||' , '|' 의
차이를 알고 사용해야한 다는 것이다. 우선 쉽게 설명하자면 하나의 기호만 있을 경우 앞의 조건이 거짓이여도 뒤의 조건까지 비교하는 것,
반대로 두 개의 기호가 있을 경우 앞의 값이 거짓이라면 뒤의 조건은 비교조차 하지 않는다.
5.instanceof
class LiveStudy { public static void main(String[] args) { Parent obj1 = new Parent(); Parent obj2 = new Child(); System.out.println("obj1 instanceof Parent: " + (obj1 instanceof Parent)); //True System.out.println("obj1 instanceof Child: " + (obj1 instanceof Child)); //False System.out.println("obj1 instanceof MyInterface: " + (obj1 instanceof MyInterface)); //False System.out.println("obj2 instanceof Parent: " + (obj2 instanceof Parent)); //True System.out.println("obj2 instanceof Child: " + (obj2 instanceof Child)); //True System.out.println("obj2 instanceof MyInterface: " + (obj2 instanceof MyInterface)); //True } }
처음 자바를 배웠을 때 굉장히 많이 사용했던 연산자로 한 객체가 어느 Class에 속하는지 또는 상속받는지를 Boolean Type 으로 반환해준다.
6.assignment(=) operator
assignment operator(대입연산자)란 단순 할당 연산자로 우항의 값을 좌항에 대입한다.
class LiveStudy { public static void main(String[] args) { int live = 0; //live의 값은 0 int study = live + 2; //study의 값은 2 } }
7.화살표(->) 연산자
보통 람다 표현식, 람다라고 하며 Java 8부터 도입된 기능으로 기존의 메소드를 좀더 짧고 간략하게 표현할 수 있는 장점이 있다.
메소드명을 생략할 수 있고, 매개변수의 타입을 생략할 수 있다. 또한 괄호와 return 문을 생략할 수 있다. 아래에서 예를 들어봤다.
@FunctionalInterface // 함수형 인터페이스 선언 interface foo{ int operator(int a, int b); } class LiveStudy{ public static void main(String[] args) { int a = 8; int b = 10; foo f = new foo() { public int operator(int a, int b) { return a+b; } }; int operator = f.operator(a, b); System.out.println(operator); //18 foo foo = (x, y)-> x+y; int operator1 = foo.operator(a, b); System.out.println(operator1); //18 } }
익명클래스를 선언하는 부분과 실제 내부 구현을 한 줄로 처리할 수 있다. 이는 @FunctionalInterface 라는 어노테이션을 인터페이스에 달아줬기에
함수형 인터페이스로 작동한다.
8.3항 연산자
3항 연산자란 (조건문) ? 참 : 거짓 과 같은 형태의 연산자로 조건문을 대체할 수 있다.
class LiveStudy { public static void main(String[] args) { boolean result1 = false; boolean result2 = false; if(10 > 8){ result1 = true; }else { result1 = false; } result2 = 10 > 8 ? true : false; System.out.println(result1); // true System.out.println(result2); // true } }
result1 과 result2의 처리과정은 동일하다. 여러 줄의 if문을 한줄로 만들 수 있는 장점이 있지만, 삼항 연산자를 연속으로 사용하면 오히려 가독성이
떨어질 수 있으니 유의해서 사용해야 한다.
9.연산자 우선 순위
모든 연산자에는 우선순위가 있고 그 순서대로 처리가 된다.
우선순위가 정리된 표를 가져왔다. 표를 보면 모든 이항연산자는 왼쪽에서 오른쪽으로 연산되며, 단항 연산자와 삼항 연산자는 반대로 오른쪽부터
연산한다. 또 우선순위로는 단항, 이항, 삼항 순으로 항이 많아질수록 연산순위가 낮아진다.
10.(optional) Java 13. switch 연산자
다음은 switch문으로 처음 자바를 배울 때말곤 쓴적이 없어 기억을 더듬으며 코드를 작성해봤다.
class LiveStudy{ public static void main(String[] args) { String studyName = ""; int study = 3; switch (study){ case 1: studyName = "JVM이란?"; break; case 2: studyName = "자바 데이터 타입"; break; case 3: studyName = "연산자"; break; } System.out.println(studyName); // 연산자 } }
위와 같이 변수의 값에 따라 분기를 태워주는 기본적인 문법인데 Java12부터 switch 연산자라는 것이 추가되었다.
class LiveStudy{ public static void main(String[] args) { String studyName = ""; int study = 3; switch (study){ case 1: studyName = "JVM이란?"; break; case 2: studyName = "자바 데이터 타입"; break; case 3: studyName = "연산자"; break; } System.out.println(studyName); //연산자 studyName = switch(study){ case 1 -> "JVM이란"; case 2 -> "자바 데이터 타입"; case 3 -> "연산자"; } System.out.println(studyName); //연산자 } }
위 스위치 문과 아래의 스위치문은 동일하다. break를 표기하지 않아도 되며. 결과를 return 받을 수 있다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
9주차 과제: 예외 처리 (0) 2021.01.14 2주차 과제: 자바 데이터 타입, 변수 그리고 배열 (0) 2021.01.14 1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. (1) 2021.01.14