[오늘 공부한 부분]

1. Java 참조 타입과 참조 변수 

2. Java 배열

 


1. 참조 타입

  • 참조 타입(reference type) : 객체(object)의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스를 말한다.
  • 기본 타입(primitive type)인 byte, char, short, int, long, float, double, boolean 변수는 실제 값을 변수 안에 저장한다.
  • 하지만 참조 타입 변수는 메모리의 번지를 변수 안에 저장한다. = 번지를 통해 객체를 참조한다는 뜻 ! 
  • 정리하자면, 기본 타입의 변수와 객체는 스택 영역에 한번에 저장되고, 참조 타입은 변수는 스택영역에 그리고 객체는 힙 영역에 저장된다고 생각하면 된다.

 

https://www.naukri.com/learning/articles/data-types-in-java-primitive-and-non-primitive-data-types/

 

 

2. 메모리 사용 영역(Runtime Data Area)

 

https://www.quora.com/How-many-types-of-memory-areas-are-allocated-by-JVM

 

※ Some of the memory areas allocated by JVM are:


1. ClassLoader : It is a component of JVM used to load class files.
2. Class (Method) Area : It stores per-class structures such as the runtime constant pool, field and method data, and the code for methods.
3. Heap : Heap is created a runtime and it contains the runtime data area in which objects are allocated.
4. Stack : Stack stores local variables and partial results at runtime. It also helps in method invocation and return value. Each thread creates a private JVM stack at the time of thread creation.
5. Program Counter Register : This memory area contains the address of the Java virtual machine instruction that is currently being executed.
6. Native Method Stack : This area is reserved for all the native methods used in the application.

 

메소드 영역 (Method Area) : JVM이 시작할 때 생성, 모든 스레드가 공유하는 영역

힙 영역 (Heap Area) : 객체와 배열이 생성되는 영역. 객체를 참조하는 변수나 필드가 없다면 그 객체를 쓰레기로 취급하고 쓰레기 수집기(Gabage collector)를 실행시켜 자동으로 제거한다. 따라서 개발자는 따로 객체를 제거할 필요가 없다.

JVM 스택 영역 (JVM Stack) :

  • 메소드를 호출할 때마다 프레임을 추가하고 메소드가 종료되면 해당 프레임을 제거하는 동작을 수행.
  • 변수는 선언된 블록 안에서만 스택에 존재하고 블록을 벗어나면 스택에서 제거된다.
  • 기본 타입 변수는 스택 영역에 직접 값을 가지고 있지만, 참조 타입 변수는 스택 영역에 힙 영역의 객체 주소를 가진다.(다시 한번)

 

3. 참조 변수의 ==, != 연산

  • 기본 타입 변수의 ==, != 연산은 변수의 값이 같은지 아닌지를 조사하지만
  • 참조 타입 변수의 ==, != 연산은 동일한 객체를 참조하는지 다른 객체를 참조하는지 알아볼 때 사용된다.
  • 참조 타입 변수 값 = 힙 영역 객체의 주소 (따라서 번지 값을 비교하는 것.)

 

4. null 과 NullPointerException

  • null(널) 값 : 참조 타입의 변수가 힙 영역의 객체를 참조하지 않는다는 뜻
  • null 값도 초기값으로 사용할 수 있기 때문에, null로 초기화된 변수는 스택 영역에 생성된다.
  • 예외(Exception) : 자바 프로그램 실행 도중 발생하는 오류
  • NullPointerException는 가장 많이 발생하는 예외 중 하나 - 참조 변수를 잘못 사용했을 때 발생! 

예를 들면, 참조 변수의 값이 null이라면 객체가 존재하지 않기 때문에 필드나 메소드를 사용하는 코드를 실행하면 발생한다.

int[] intArray = null;
intArray[0] =10; // NullPointerException 발생 !

String[] str = null;
System.out.println("총 문자수:" + str.length()); //NullPointerException 발생 !

 

 

5. String 타입

  • 자바는 문자열 리터럴(값)이 동일하다면 String 객체를 공유하도록 되어있다.
  • 만약 문자열이 같은 새로운 객체를 만들고 싶다면 객체 생성 연산자인 new 연산자를 사용한다.
  • 아래의 예시와 같이 문자열 리터럴로 생성하느냐 new 연산자로 생성하느냐에 따라 비교 연산자의 결과는 달라진다. 
  • 동일한 String 객체이건 다른 String 객체이건 상관 없이 내부 문자열을 비교하고 싶을 때에는 equals()메소드를 사용한다.
String name1 = "신용권";
String name2 = "신용권";

String name1 == String name2 (true)

String name3 = new String("신용권");
String name4 = new String("신용권");

String name1 == String name2 (false)
String name3 == String name4 (false)

name3.equals(name4) (true) // 문자열 값 자체는 같기 때문에 !

 

 

equals() vs hashCode() vs System.identityHashCode() 비교

 

  • equals() : equel은 두 객체의 참조값을 비교하는 Method
  • hashCode() : 객체의 해시코드(정수로 구성된 주소값)를 반환하는 Method, 객체의 주소를 int로 변환해서 반환한다. 그러나 문자열이 같은 경우 같은 정수값을 도출한다.
  • System.identityHashCode() : 객체 번짓수 값을 확인해주는 Method. 객체 자체를 비교하려면 이 메소드를 사용하는 것이 좋다.

 

[정리 !]

  • String 타입의 변수가 서로 다른 객체를 가지더라도 문자열만 같으면 hashCode() 값이 같다.
  • String 타입 변수의 주솟값 즉, 번짓수는 System.identityHashCode()를 통해 분별할 수 있으므로, 이 함수를 적용해야 서로 다른 객체를 갖고있는지 판단 할 수 있다.

 

Object's hashCode() method does not have a unique value for each object because it can be overridden in subclasses. This method can be overridden to express that the properties of the objects are the same. For example, if the hashcode of a String is, it means that the string is the same even if the objects are different.

On the other hand, System.identityHashCode() cannot be overridden and returns a unique hashCode of the object. It is recommended to use this method if you want to compare the objects themselves.

 

[ 출처 ]

https://codechacha.com/ko/java-hashcode/

https://codechacha.com/en/java-system-identityhashcode/

 

'Coding > Java' 카테고리의 다른 글

[08] Java 열거 타입  (0) 2022.11.12
[07] Java 배열  (0) 2022.11.11
[05] Java 조건문과 반복문  (0) 2022.11.11
[04] Java 연산자와 연산  (0) 2022.11.11
[03] Java 시작하기(설치), 변수와 타입  (1) 2022.11.11

[오늘 공부한 부분]

1. Java 조건문 - if문, switch문 

2. Java 반복문 - for문, while문, do-while문


1. 제어문

  • 자바 프로그램은 메소드의 시작 중괄호에서 끝 중괄호 까지 위에서 아래로 실행하는 흐름을 갖고 있다.
  • 이러한 실행 흐름을 개발자가 원하는 방향으로 바꿔주는 것을 (흐름)제어문 이라고 한다.
제어문 조건문   if 문   if(조건식){...} 형태로 조건식이 true이면 중괄호 내부를 실행
  swich 문 switch(변수){case 값1:... case 값2:..dfault:...}형태로 변수의 값에 따라 코드를 실행
반복문   for 문  for(초기화식;조건식;증감식){...}형태로 조건식이 true가 될 때까지만 중괄호 내부 반복되고 반복할 때마다 증감식이 실행된다. 초기화식은 사용할 변수를 초기화 해준다. 주로 지정된 횟수만큼 반복할 때 사용
  while 문  while(조건식){...}형태로 조건식이 true가 될 때까지만 중괄호 내부 반복
  do-while 문  do{...}while(조건식) 형태로 중괄호 내부를 먼저 실행하고 그다음 조건식이 true가 되면 다시 중괄호 내부를 반복 실행

 

[ + 추가 ] 

  • break 문 : for문, while문, do-while문 내부에서 실행되면 반복을 취소
  • contiune 문 : for문, while문, do-while문 내부에서 실행되면 증감식 또는 조건식으로 돌아감 

 

 

2. 조건문

① if문

  • if문의 기본 원리는 조건식이 true 이면 블록을 실행하고 false이면 실행하지 않는 것 !
  • if문에서 괄호{}블록은 생략하지 않고 작성하는 것이 가독성이 좋고 버그 발생을 줄일 수 있다.

 

출처 : https://www.geeksforgeeks.org/java-if-else-if-ladder-with-examples/
if문 예제 1부터 100까지 3의 배수 총합을 구하시오.

 

② switch문

  • 변수가 어떤 값을 갖느냐에 따라 실행문이 선택되는 조건 제어문이다.
  • 때문에 같은 코드를 작성하더라도 if문보다 코드가 간결하다.
  • switch문은 괄호 안의 변수 값과 동일한 값을 같는 case로 가서 실행문을 실행
  • 만약 괄호 안의 변수 값과 동일한 값을 갖는 case가 없으면 default로 가서 실행문을 실행한다. default는 생략 가능하다.

 

출처 : https://www.geeksforgeeks.org/

 

 

※ 다음은 while 문, switch문, Scanner, nextLikne()을 사용한 예시이다.

1. 먼저 불리언 변수를 true로 설정해 주고, Scanner 와 Integer.parseInt(scanner.nextLine())을 통해 입력된 정수값을 받는다.

2. 그리고 Switch문을 통해 변수값에 따른 실행문을 실행한다.

3. 여기서 case 끝에 붙어 있는 break; 는 다음 case를 실행하지 않고 switch문을 빠져나가기 위함이다.

 

 

3. 반복문

  • for문과 while문은 서로 변환이 가능하다.
  • for문은 반복 횟수를 알고 있을 때 주로 사용하고, while문은 조건에 따라 반복할 때 주로 사용한다.
  • 제어문 블록 실행이 완료되었을 경우 조건문의 경우 정상 흐름으로 돌아오지만,
  • 반복문의 경우 제어문 처음으로 다시 되돌아가 반복 실행한다. 이를 루핑(looping)이라고 한다.

① for 문

 

출처 : https://www.geeksforgeeks.org/

 

  • 주어진 횟수 만큼 실행문을 반복 실행할 때 사용한다.
  • 어떤 경우에는 초기화식이 둘 이상 있을 수 있고, 증감식 역시 둘 이상 있을 수 있다. - 쉼표로 구분!
  • 초기화식에서 선언된 변수는 for문 블록 내부에서 사용되는 로컬변수 이기 때문에 for문 밖에서는 사용할 수 없다.
  • 초기화식에서 루프 카운터 변수로 float타입을 사용할 수 없다.

※ 중첩 for 문

중첩 for문 예시1
중첩 for문 예시2

※ 중첩 for 문 : for문은 다른 for문을 내포할 수 있는데, 이 경우 바깥쪽 for문이 한 번 실행할 때마다 중첩된 for문은 지정된 횟수만큼 돌다가 다시 바깥쪽 for문으로 돌아간다.

 

 

② while 문

 

출처 : https://www.geeksforgeeks.org/

 

  • 조건식이 true일 경우 계속해서 반복하는 반복문
  • 조건식에는 boolean타입 변수나 true/false값을 산출하는 어떤 연삭식이든 올 수 있다.
  • 만약 while(true){...} 로 된다면 무한 루프를 돌게 되는데, 이때는 while문을 종료시키기 위해 변수값을 false로 만들거나, break문을 이용하는 방법이 있다.

while문과 if문을 이용한 예제 1
while문과 if문을 이용한 예제 2

 

③ do - while 문

 

출처 : https://www.geeksforgeeks.org/

 

  • 블록 내부의 실행문을 우선 실행하고 실행 결과에 따라서 반복 실행을 게속할지 결정 하는 반복문
  • 작성시 반드시 while()뒤에 ; 세미콜론을 붙여야 한다!

 

④ breack 문

  • 반복문인 for문, while문, do-while문, switch문을 실행 중지할 때 사용
  • 대게 if문과 같이 사용되어 if문의 조건식에 따라 for문과 while문을 종료할 때 사용
  • 만약 반복문이 중첩되어 있을 경우 가장 가까운 반복문만 종료하고 바깥쪽 반복문은 종료하지 않음 
  • 따라서 바깥쪽 반복문도 종료시키려면 바깥쪽 반복문에 이름(라벨)을 붙여야함.

Outter 이라는 라벨을 붙여준 덕분에 안쪽에서도 break 할 수 있다

 

 

⑤ continue 문

  • 블록 내부에서 continue문이 실행되면 for문의 증감식 또는 while문, do-while문의 조건식으로 이동
  • 반복문을 종료하지 않고 계속 반복을 수행한다는 점이 break와 다르다.
  • if문과 함께 쓰여 특정 조건을 만족하는 경우에 그 이후의 문장을 실행하지 않고 다음 반복으로 넘어간다.

for문, if문, continue문 을 사용해서 10이하의 짝수 프린트하기

 

'Coding > Java' 카테고리의 다른 글

[07] Java 배열  (0) 2022.11.11
[06] Java 참조 타입  (0) 2022.11.11
[04] Java 연산자와 연산  (0) 2022.11.11
[03] Java 시작하기(설치), 변수와 타입  (1) 2022.11.11
[02] 생활코딩 Java 입문 강의 정리 (2)  (0) 2022.11.04

[오늘 공부한 부분]

 

1. git 기본 개념

2. git 두 가지 error 해결

  • error1 - 'Sourcetree 응용 프로그램이 예기치 않게 종료되었습니다.'
  • error2 - Refreshing Remote Repositories Failed

1. git 기본 키워드 정리

 

① 버전 관리: 프로젝트 상태가 변경되는 정보를 알고 있다는 것! Git 은 가장 널리 쓰이는 버전관리 도구 중에 하나로 commit 을 사용해서 버전이 달라지는 것을 관리할 수 있다.

 

ⓩ git 초기화(git initialize) : 컴퓨터에 있는 프로젝트를 Git 이 관리하는 프로젝트로 만들 수 있다. 깃초기화 작업 후엔 해당 파일에 .git 폴더가 생성되는 것을 확인 할 수 있다. git 초기화는 처음에 단 한번만 해 주면 된다.

 

③ commit : 현재 프로젝트의 상태를 찰칵 📸 저장하는 것.

  • 누가(author), 언제 commit 했는지의 정보와 프로젝트 변경 내용알 수 있다.
  • 작업내역이 어떤 것인지 알아볼 수 있게 적는 메시지를 'commit 메시지'라고 한다. ->협업과정에서 커밋메시지를 잘 쓰는 것도 중요!

 

④ add (혹은 staging, 스테이징) : commit 에 반영할지 안할지는 파일 단위로 선택할 수 있다. commit 에 반영할 파일을 선택하는 것. 작업 내역을 저장하기 위해서는 add - commit 만 하면 된다.

 

ⓢ commit history : commit 한 순서대로 리스트. 역사!

 

⑥ repo : 'Git으로 관리되는 프로젝트' 를 Git 에서는 repo(리포, repository 리포지토리의 약자) 라고 한다. 내 컴퓨터에 저장되어있는 리포지토리를 로컬 repo(local repository), Github 처럼 다른 곳에서 접속할 수 있는 공간에 저장되어있는 것을 원격 repo(remote repository) 라고 한다.

 

⑦ Tracking(추적) : 로컬 repo 와 원격 repo 를 연결하는 것

 

⑧ push : 로컬 repo 의 commit 들을 원격 repo 에 반영하기(push)! 밀어넣기. 원격 repo 에 없는 즉,새로운 commit 내역을 모두 원격 repo 에 한 번에 반영한다.

 

⑨ pull : 원격 repo 의 commit 들을 로컬 repo 로 반영하기(pull)! 땡겨오기. 로컬 repo 에 없는 즉,새로운 commit 내역을 모두 로컬 repo 에 한 번에 반영한다.

 

⑩ clone : 원격 repo 를 내 컴퓨터에 가져와서 초기 repo 세팅하는 것을 clone(복제하기)!

 

출처는 사진에 !

 

 

[ 정리 ]

 

1. 로컬 pc에 있는 작업물을 깃허브에 업로드 하는경우.

 

[git 초기화]

  • sourcetree 계정연결 확인
  • Create new existing locao repo
  • 목적지 경로 옆에 ... 을 클릭해서 폴더를 선택
  • 유형을 Git으로 바꿔주고 '생성하기' 버튼 클릭
  • opne local repo(double click)

[add/ staging] - [commit 메시지 작성] - [commit] - [history확인] - github에서 [원격 repo] 만들기 - [tracking] - 파일 [push]

 

2. 원격 pc에 있는 작업물 내려 받아 작업하기

 

sourcetree 계정연결 - [원격 repo]에서 원하는 파일 [clone] 

 

2. Git error 

 

① error1 - 'Sourcetree 응용 프로그램이 예기치 않게 종료되었습니다.'

 

 

처음엔 인증문제라 생각해서 정말 수두룩 빽빽 올라온 구글링 정보로 키체인 재설정 (초기화)도 해보고, 깃허브 토큰도 몇 번 재발급 받아보고 했지만 2시간 가량 낑낑된 이 에러..... 정말 쉽게 해결 하였다.

 맥과 소스트리 언어설정을 영어(US)로 바꿔주면 해결 ... 쏘 간단 .... ㅠ-ㅠ

 

  • 맥 언어 바꾸는 법 : [시스템 환경설정 ] - [언어 및 지역] - [ 왼쪽 하단 + 버튼 클릭후 영어 선택] - [기본언어 영어로 설정]
  • 소스트리 언어 바꾸는 법 : [소스트리 설정 단축키는 commamd + ] - [ preffered language 영어로 설정] 

[출처] : 

 

[for Mac]Sourcetree 응용 프로그램이 예기치 않게 종료되었습니다.

맥에서 깃을 사용할때 Sourcetree에서 자꾸 꺼지기만 하는 현상.. 검색해서 찾았는데.. 못 찾는 사람이 있을까봐 글을 남긴다. 우선 내 버전은 4.18 한글로 나오는 경우에 오류가 난대 그래서 영어로

babysunmoon.tistory.com

 

② error2 - Refreshing Remote Repositories Failed

 

 

내 로컬 repo에 있는 파일을 원격 repo로  push하는 과정에서 이런 오류가 발생했다. 오류 이유는 원격 url/path를 추가하는 과정에서 깃헙의 링크를 복붙해서 설정했어야 하는데, 강의 자료만 보고 옆 지구본을 눌러서 나타난 문제였다. 해결은 간단하게 복사한 링크를 인풋창에다 붙여넣기 하면된다.

 

③ Mac 에서 sourcetree 기본 브랜치 이름 변경하는 방법

 

 

SourceTree 기본 브랜치를 master 에서 main 으로 변경하기

 

www.lesstif.com

 

[오늘 공부한 부분]

 

1. 항해99 입학시험 - 자바스크립트 특정 문자열 제거 함수 사용하기


1. 항해99 입학시험

 

  오늘은 항해99 10기 입학시험이 있던 날이다. 오늘 주어진 과제는 화성땅공동구매 화면에 가격란을 추가하고 평수에 따라 가격을 500원씩 계산한 값을 화면단에 보여주는 것이었다. 일단 가격에 대한 변수를 price라고 만들어 주었고, 그 값을 평수 * 500으로 구현하면 되는 것인데, 평수의 변수 값에 "평"이라는 문자때문에 연산에 에러가 났다. 그래서 특정 문자열 제거하는 함수를 구글링하여 문제를 해결했다. 

 

 

1. 처음 구현했던 방법은 substring()를 사용한 방법이었다. 평수가 "10평, 20평, 30평, 40평, 50평" 이렇게 정해져 있었기 때문에 앞에서부터 두번째 인덱스까지만 추출해서 곱하기 연산을 하는 방법을 사용했다. 표면적으로 과제 구현에 성공은 했지만, 훗날 만약에 3자릿수 평수 예를 들면 100평과 같은 평수를 주고 싶을때는 제대로 구현되지 않을 코드라는 점에서 개선이 필요했다.

 

2. 그래서 최종적으로 사용한 함수는 replace() 함수였다. 이 함수는 특정 문자열을 제거해 주기 때문에 "평"이라는 문자를 제거하고 숫자값만 추출하여 평수의 자릿수와 관계없이 가격을 추출할 수 있는 코드가 되었다.

 

2. 특정 문자열 제거하는 함수

 

 substr() : 함수는 특정 위치에서 시작하여 길이만큼 문자열을 반환한다. 

str.substr(start, length) // start위치에서 length만큼의 문자열을 추출

var str = 'abcdef';

console.log(str.substr(1)); //bcdef
console.log(str.substr(1,4)); //bcde
console.log(str.substr(-5,2)); //bc

 

 substring() : 특정 위치에서 시작하여 특정 인덱스 전 까지 문자열을 반환한다.

str.substring(indexStart, indexEnd) //indexStart는 추출하고자 하는 문자열의 시작 인덱스, indexEnd는 설정된 값 이전 인덱스까지

var str = 'abcdef';

console.log(str.substring(1)); //bcdef
console.log(str.substring(1, 4)); //bcd
console.log(str.substring(4, 1)); //bcd
console.log(str.substring(-1)); //abcdef

 

 slice() : 함수는 인덱스 범위로 문자열을 자른다는 개념은 substring() 함수와 동일하지만 미묘한 차이가 존재한다.

str.substring(indexStart, indexEnd) // indexStart는 추출하고자 하는 문자열의 시작 인덱스, indexEnd는 설정된 값의 이전 인덱스까지 문자열을 추출

var str = 'abcdef';

console.log(str.slice(1)); // bcdef
console.log(str.slice(1, 4)); // bcd
console.log(str.slice(-1)); // f
console.log(str.slice(-4, -1)); cde

※ substring() 함수와 slice() 함수의 차이점

  • substring() 함수와 slice() 함수는 매개변수의 값이 음수일 경우 동작되는 방식이 다르다.
  • substring() 함수는 첫 번째 매개변수가 두 번째 매개변수보다 클 경우 값을 교환하여 동작
  • slice() 함수는 첫 번째 매개변수가 두 번째 매개변수보다 클 경우 빈 값을 반환
  • substring() 함수는 첫 번째 매개변수가 음수일 경우 0으로 처리
  • slice() 함수는 첫 번째 매개변수가 음수일 경우 문자열의 길이 + 첫 번째 매개변수의 결괏값으로 설정

 

 replace() : 특정 문자열을 빈 값('')으로 대체, 정규식을 만족하거나 특정 문자열이 존재할 경우 원하는 문자열로 대체할 수 있다.

var str = 'abcdef';

console.log(str.replace('a', '')); //bcdef
console.log(str.replace('f', '')); //abcde

 

출처 :https://developer-talk.tistory.com/178

 

 

 

 

'Coding > Javascript' 카테고리의 다른 글

javascript 기초 문법  (0) 2022.11.01

[오늘 공부할 부분]

 

- 어제 헷갈렸던 연습문제 복습

1. 연산자와 연산식

2. 연산자의 종류


- 어제 문제 복습

 

첫번쨰 -> 첫번째, 덧셉결과 -> 덧셈결과 오타가 있네요 !

※ 헷갈렸던 부분 :

scanner.nextLine()은 문자열을 읽어오고 그걸 다시 Integer.parseInt()로 받으면 int화 될 것 같은데 왜 첫번째 수에 A를 넣고 두번째 수에 B를 넣으면 오류가 나는 것일까? 내가 가정했던 부분은 A가 65 이고 B가 66이기 때문에 그 합이 결과값으로 나올 거라 예상했다. 

 

팀원들과 토론 후 내린 결론 (확실하지 않음...) → 

① String 타입은 char 타입으로 강제 캐스팅할 수 없다. - char 타입 이었다면 int 타입으로 변환되서 가능했을지도.

② int 타입엔 문자인 'A'나 'B' 자체가 들어갈 수 없다.

③ 참고 ( char 타입 산술 연산 할 때 int 타입 결과 값이 아니라 char 타입으로 받는 방법 )

 

 

 

1. 연산자와 연산식

① 기초 개념

  • 연산자(operator) : 연산에 사용되는 표시나 기호 ex) +, -, *, /, %
  • 피연산자(operand) : 연산되는 데이터 ex) 3 + x 연산식의 피연산자는 3과 x
  • 연산식(expression) : 연산자와 피연산자를 이용하여 연산의 과정을 기술한 것
  • 연산 우선순위 : 괄호()로 감싼 연산이 최우선순위를 갖는다.
  • 연산식은 반드시 하나의 값을 산출한다.
  • 산술 연산자의 경우 숫자타입(byte, short, int, long, float, double)으로 결과 값이 나오고, 비교연산자와 논리 연산자는 논리타입(boolean)으로 결과 값이 나온다.

② 연산자의 종류

출처 : https://docs.oracle.com/javase/tutorial/
출처 : https://medium.com/@katekim720/ , 신용권 <혼자 공부하는 자바>

③ 연산의 방향과 우선순위

  • 단항, 이항, 삼항 연산자 순으로 우선순위를 갖는다.
  • 산술, 비교, 논리, 대입 연산자 순으로 우선순우를 갖는다.
  • 단항, 부호, 대입 연산자를 제외한 모든 연산의 방향은 왼쪽에서 오른쪽이다.
  • 복잡한 연산식에는 괄호()를 사용해서 우선순위를 정한다.

 

2. 연산자의 종류

 

 단항 연산자 : 부호 연산자 (+,_), 증감 연산자(++,--), 논리 부정 연산자(!)

  •  부호 연산자: 양수 및 음수를 표시하는 +, -를 말한다. boolean, char 타입을 제외한 나머지 기본 타입에  사용할 수 있다.

※ 주의할 점은 부호 연산자의 결과가 int 타입이라는 것 ! 따라서 byte 타입 변수를 부호 연산하면 int 타입으로 변환된다.

 

  • 증감 연산자(*헷갈리는 파트): 변수의 값을 1증가 시키거나 1 감소 시키는 연산자. ( ※ 참고로 ++i  i = i + 1 의 연산 속도는 같다.)

출처 :&nbsp;https://unknownyun.blogspot.com/2018/08/blog-post_38.html

  • 논리 부정 연산자 (!) : 피연산자가 true이면 false 값을 산출, 피연산자가 false이면 true 값을 산출

 

 

 

② 이항 연산자 : 산술 연산자 (+, -, *, /, %), 문자열 결합 연산자(+), 비교 연산자(<,<=,>,>=,==,!=), 논리 연산자(&&,||,^,!), 대입 연산자(=,+=,-=,*=,/=,%=)

 

  • 산술 연산자와 문자열 결합 연산자는 어제 내용과 겹치기 때문에 오늘은 넘어가도록 한다.

 

  • 비교 연산자에서 주의할 부분은 float 타입이다. 실수의 저장 방식인 부동 소수점 방식때문에 아래와 같이 0.1 과 0.1f의 값이 다르다. 0.1f는 0.1의 근삿값(0.10000000149011612)으로 표현된다. 따라서 0.1보다 큰 값이 되어버린다. 
  •  이것의 해결책은 다음과 같이 피연사자를 모두 float 타입으로 변환하거나 정수타입으로 변환해서 비교하는 방법이 있다.
  • String 변수 비교: 기본 타입 변수 값을 비교할 때는 == 연산자를 사용하지만, 참조 타입인 String 변수를 비교할 때에는 equals() 메소드를 사용한다.

 

 

  • 논리 연산자

출처 : https://medium.com/@katekim720/ , 신용권 <혼자 공부하는 자바>

  • &보다 &&가 더 효율적 : &&는 앞의 피연산자가 false라면 뒤의 피연산자를 평가하지 않고 바로 false 라는 산출결과를 내지만 &는 두 피연산자를 모두 평가해서 산출 결과를 내기 때문 ! (| 와 ||도 마찬가지)
  • 논리 연산은 흐름 제어문인 조건문(if), 반복문 (for, while) 등에서 주로 이용

 

  • 대립 연산자는 오른쪽 피연산자 갑을 왼쪽 피연산자인 변수에 저장한다.
  • 대립 연산자는 모든 연산자들 중에서 가장  낮은 연산 순위를 가지고 있기 때문에 제일 마지막에 수행 된다.

 

 

③ 삼항 연산자

 

  • (조건식) ? A : B 를 말하며 조건이 true면 A를 산출하고, false이면 B를 산출 한다.
  • if 문을 쓰면 길어질 코드를 한 줄에 간단하게 작성 가능하기 때문에 효율적이다.

 

+ Recent posts