1. 우리가 왜 .equal를 사용하는 가?
Member mb1 = new Member() ;
mb1.id = " leess" ; mb1.nickname = new String ("leess") ;
mb2.id = " leess " ; mb2.nickname= new String("leess") ;
System.out.println (mb1.id == mb2.id) ; // => true
System.out.println (mb1.nickname == mb2.nickname) ; // => false
System.out.println(mb1.nickname.equals(mb2.nickname) ; // => true
System.out.println(mb1.name.equals(mb2.name) ; // => true
위에서 본 것처럼, 두가지 방식으로 mb1과 mb3의 변수을 만들고, 출력하는 주석에 있는 내용처럼 처리가 된다. 그렇다면, 둘 다 똑같이 적용했는데, 하나는 'true'가 뜨고 다른 하나는 'false' 뜨는 이유는 무엇일까?
인스턴스(객체)와 인스턴스(객체)를 비교(==) 할 때는 인스턴스에 저장된 값을 비교하는 것이 아니라 메모리상에 올라가 있는 인스턴스의 메모리 주소를 비교하는 것이다. 그러하여, mb1.nickname 과 mb3.nickname에 저장된 값은 같지만 둘의 메모리주소가 다르기 때문에, false 가 출력되는 것이다. 그렇다면, 왜 mb1.id 와 mb2.id 둘을 비교하게 됐을 때, 'true' 가 나타난다. 이는 String 인스턴스를 자바에 내장된 클래스로 new 키워드로 새로운 객체를 생성하고 비교(==) 를 하면, 메모리 주소를 비교하게 된다. 반면, " " 안에 값을 입력하여 생성하고 , 비교(==) 를 하면, " " 안에 값을 비교해준다.
물론 , " " 안에 값을 입력하여 생성하면 원하는 값을 도출 할 수 있다. 그러나, new 키워드로 새로운 객체를 생성하는 경우도 다수 존재하고, equals 를 쓰면 어떠한 경우에도 문제없이 값을 비교해주기 때문에, .equals를 쓴다.
2. IF문
if (조건식1) { 실행문1 } ; // 조건식1이 참일 경우에는 실행문1을 진행
else if (조건식2) { 실행문2 } // 조건식
else { 실행문3 } ; // 조건식이 거짓일 경우 실행문을 실행
- if문은 위와 같이 코드를 작성한다. if 문의 작동원리를 살펴보도록 하자.
1) if 문에서 조건식1이 참인 경우에는 실행문 1을 실행한다.
2) if 문에서 조건식 2가 참인 경우에는 실행문 2를 실행한다.
3) 조건식 1과 2에 해당하지 않는 경우에는 실행문 3을 실행한다.
3. Switch문
switch (key) {
case1 "value1" : 실행문1 ; break ; case2 "value2" : 실행문2 break;
default : break ;
- switch 문은 위와 같이 코드를 작성한다. switch 문을 작성할 때, 가장 주의해야할 것이 있다. switch(key) 안에 들어올 수 있는 타입은 byte, short, int ,char ,string 만 가능하다는 것이다. switch 문의 작동 방식은 key 와 value1이 같다면, 실행문 1을 실행하고, 그 다음에 break를 실행한다. 여기서, 그렇다면 'break' 란 무엇인가? break가 작동하면 switch문을 빠져나가는 것이다. 즉, key와 value 1와 같은 객체들은 실행문 1을 실행하고, break를 만나 빠져나간다. 또, key와 value2 와 같은 객체들은 실행문 2를 실행한다. case1 과 case2 에 둘다 해당하지 않는 경우에는 default로 가서 break를 실행한다.
4. for문
for ( int i=0 ; i<10 ; i++ ) { // for ( 초기화 ; 조건식 ; 증감식 ;)
System.out.println((i+1)+". 안녕 여러분") ; } // => 반복해서 실행할 문장 ;
// 1.안녕 여러분
// 2.안녕 여러분
//.....
// 9.안녕 여러분
//10.안녕 여러분 => 다음과 같이 출력된다.
for문은 반복문으로서 다음과 같은 순서로 반복된다. for문의 초기화를 하고, 조건식이 참(true)라면 반복해서 실행할 문장;을 실행하고서 for문을 빠져나가지 않고 그다음에 증감식으로 간다. 반면에, 조건식이 거짓(false)라면 반복해서 실행할 문장을 실행하지 않고 for문을 빠져나간다.
Tip 1: for문의 초기화는 for문 전에 초기화를 해준다면 생략을 할 수 있다.
EX) int n = 0 ; for ( ; n<5 ; n++) ;
Tip 2 : for문의 초기화, 조건식, 증감식을 모두 생략한다면 , 무한반복문을 만들 수 있다.
반복문을 사용할 때, 쓸 수 있는 여러 명령어가 있다. 첫번째, 반복문의 조건에서 break ; 를 사용하면 가장 가까운 반복문을 벗어나는 것이다. 두번째, 반복문에서 continue; 를 만나면 실행순서가 아래 (밑)으로 내려가지 않고 가장 가까운 증감식으로 이동해버린다.
반복문을 사용하는 경우, Unreachable code 오류를 때때로 만날 수 있다. 위의 for문이 무한반복되기 때문에 나타나는 오류이다. break를 사용하면 해결할 수 있다.
* 앞으로도 계속하여 , 글을 올리려고 노력할 것이다. 혹시라도 , 이걸 보는 선배 개발자 분들이 계시다면, 제가 진행하는 부분에 있어서, 부족한 점이 많을 것이라고 생각합니다. 올리는 내용에 있어서도 잘못된 부분이 있을 수도 있습니다. 이러한 점에 있어서, 지적해주신다면 바로 고치도록 하겠습니다. 많은 응원과 격려 , 질타 부탁드리겠습니다. 감사합니다.

''국비지원'의 시작' 카테고리의 다른 글
자바비긴즈 08 (random , 반복문) (0) | 2023.01.13 |
---|---|
자바 비긴즈 07 ( while문, do while문 ) (0) | 2023.01.10 |
자바 비긴즈 05 (스캐너, wrapper 클래스 , math클래스) (0) | 2023.01.08 |
자바 비긴즈 04 ( 데이터형 변환, 연산자 , 스캐너) (0) | 2023.01.05 |
자바 비긴즈 03(constructor) (0) | 2023.01.04 |