언어 공부 내용 정리/Java

구름에듀 생활코딩 자바 08강~09강 + == 와 .equals()의 차이점

wosrn 2023. 5. 15. 18:52

08강

 

# 곱하기 *, 나누기 / , 나머지 %

# 정수 / 정수 = 실수인 경우 => 실수의 소숫점 아래 수들 잘리고 정수부분만 표시됨 ( 손실 )

# 정수 / 실수 = 실수인 경우 => 정수가 실수로 자동형변환 되어서 실수 값 손실 없이 그대로 결과로 나옴

# 단항 연산자  :+(양수) , -(음수) , ++(증가연산자 = 값을 1씩 증가시킴) , --(감소연산자, 갑을 1씩 감소)

# ++i  vs  i++ : ++i는 더한 후 출력 , i++는 출력문 실행 후에 더함

# 연산자 우선순위

->괄호의 우선순위가 가장 높다

->산술>비교>논리>대입

->단항>이항 : "산술>비교>논리" >삼항>대입

->진행 방향은 단항,대입연산자만 <- 이고 나머지는 ->

 

09강 비교연산자와 boolen

 

#Boolen : 참과 거짓을 의미하는 일종의 데이터타입 -> true와 false 의 두가지

#비교 연산자 : ==(같다) !=(다르다)  >(크다) >=(크거나 같다)  .equals(문자열을 비교하는 메소드 (ex. a.equals(b):문자열 비교는 단순히 a==b라고 하면 string 타입의 변수 a,b안에 같은 문자열 담겨있어도 false로 출력됨-추후 더 자세히 다룸)

-> 비교를 수행하여 결과에 따라 true 혹은 false의 값을 돌려주는 연산자

 

<== 와 .equals()의 차이점>

#자바의 자료형 - 기본 자료형(정수 실수 문자(char) 논리) + 참조 형태 자료형(이미 만들어져 있거나 직접 만들 수 있는 클래스,인터페이스,이넘(enum)자료형, 기본값은 null이며 대표적인 참조 형태 자료형은 String(문자열)

 

#자바에서 int와 같은 일반적인 데이터타입의 비교는 ==라는 연산자를 사용, 하지만 String 과 같은 class의 값을 비교할때는 ==이 아닌 String 클래스의 .equals()라는 메소드를 사용하여 비교함

 

#String 변수를 생성하는 두가지 방법 

1)리터럴 이용 (String a = "abc") : string constant pool이라는 영역에 존재하게됨 -> String의 intern()메소드를 호출하여 주어진 문자열이 string constant pool에 존재하는지 확인해서 있으면 그 주솟값을 반환, 없으면 string constant pool에 넣고 새로운 주소값을 반환함

2)new 연산자 이용 (String a = new String ("abc"): heap 영역에 존재하게됨

출처 :&nbsp;https://coding-factory.tistory.com/536

3)주소값 비교(==)와 값 비교(equals) : ==연산자는 비교하고자 하는 두개의 대상의 "주소값"을 비교(같은 메모리를 참조하는가를 비교)하는데 반해 String 클래스의 equals 메소드는 비교하고자 하는 두 개의 대상의 값 자체(주소값이 아닌 "데이터값"을 비교)를 비교한다. 기본 자료형(int,char) 등은 call by value 형태로 기본적으로 대상에 주소값을 가지지 않는 형태로 사용되는데, String은 일반적인 타입이 아니라 클래스라서 생성시 주소값이 부여되기 때문에 (call by reference) String 타입을 선언했을 때는 같은 값을 부여하더라도 서로의 주소값이 다름(== 연산자로 문자열을 비교할 수 없는 이유 , ==연산자를 참조타입 변수들 간의 연산에 사용하면 동일한 객체를 참조하는지 다른 객체를 참조하는지 알아볼때 사용됨 - 참조 타입 변수의 값은 힙 영역의 객체 주소이므로 결국 주소값을 비교하는 것이 되어 다르다는 결론이 나옴)

<함수와 메소드>

객지프를 공부할 땐 자바에 함수와 메소드의 개념이 모두 있고 함수 안에 메소드라는 개념이 있다고 오해(?)를 했었는데,, 다시 공부해보니 자바엔 메소드가 아닌 함수라는 개념이 존재하지 않고, 쉽게말해 c 등의 언어에서 함수라고 부르는 것의 개념이 자바에선 메소드라는 것을 깨닫게 되었다 (함수와 메소드는 근본적으로 다른 개념)

 

1)함수 : 특정 작업을 수행하는 코드조각 / 로직 이후 사용자가 원하는 결과를 반환(return) / 독립적으로 존재할 수 있다

 

2)메소드: 독립적으로 존재할 수 없다 (늘 클래스 내부에 존재한다 - 해당 클래스에 대한 객체가 생성되어야 사용할  수 있다) / 클래스 안에 작성되는 함수는 메소드이기 때문에 결론적으로 자바는 함수가 아닌 메소드의 개념을 사용한다고 말한 것

 

[추후 공부해볼 것,잡담] 람다식? 추상메소드? 흠,, 우선 자바 기본문법의 빠른 복습과 백준/프로그래머스 문풀 병행하면서 객체지향쪽으로 더 심화해서 공부하고(강의+학교 강계참고) c언어로 자료구조랑 알고리즘 공부해야겠다