-
JAVA1 (5)제어문생활코딩 JAVA1 2021. 12. 26. 15:23
https://www.boostcourse.org/cs128/lecture/264912
쉽게 배우는 자바2
부스트코스 무료 강의
www.boostcourse.org
=====================
1.수업소개
제어문 = FLOW CONTROL
프로그램의 핵심 기능은 시간의 순서에 따라 일어나야 하는 일을 컴퓨터에게 명령하는 것
이것만으로도 세상이 뒤집어짐
하지만 세상은 우리가 알고있는 것보다 훨씬 더 복잡하고, 사람의 욕심은 끝이없어서
저것만으로 해결할 수 없는 문제들이 있다.
사용자의 인증이 필요한 로그인하는 기능이 있는 웹사이트를 생각해보세요
사용자가 올바른 비밀번호를 입력했을 때만 그 사람의 비밀정보를 보여줘야함
로그인에 실패했을 땐 누구세요 해줘야 해
=>경우에 따라 동작이 달라져야해
조건에 따라서 실행되는 순서를 제어한다 = 조건문 = CONDITIONAL STATEMENT
처리해야할 데이터가 1억건이면
하나하나 데이터를 처리? 이런걸 반복적으로 처리할 때 사용하는 것이 반복문
물이 흐르도록 하는 중력을 시간의 순서에 따라 실행되는 프로그래밍
조건문과 반복문은 물의 흐름을 바꾸는 댐, 수문과 같은 것
이 댐을 통해서 로직의 흐름을 조작할 수 있다.
이걸 하려면 먼저
boolean data type
comparison operator
불리언 데이터 타입과 비교 연산자를 알아야 한다
생각해보면 살아있는 모든것들이
'더 좋은 것은 하고 더 나쁜 것은 하지 않는다'
이렇게 동작한다
더 좋은 것과 더 나쁜것을 판단하는 기준이 바로 '비교'
그렇다면 비교를 하는 능력은 살아있는것의 가장 중요한 특성일지도 모른다
우리는 논리학 분야의 위대한 성취중에 하나인 boolean data type부터 시작해서
boolean data type을 만들어내는 유일한 연산자인 비교연산자 를 거쳐서
교차로와 같은 조건문을 찍고
순환도로라고 할 수 있는 반복문까지
이어지는 여행을 할 것
이게 끝나면 여러분의 애플리케이션은 마치 살아있는것 처럼 변화무쌍한 모습의 똑똑한 앱이 될 것
=====================
2.Boolean data type
배웠던 데이터 타입
String : 이 형식에 맞는 데이터 타입을 표현하려면 " ", 이 큰따옴표로 인해서 문자열이 된다
Integer : 따옴표가 없는 숫자만 쓰게 되면
문자열에 속해있는 데이터는 엄청 많지만 유한하다
숫자는 무한하다
불리언은? 굉장히 특이해서 불리언 데이터 타입에 속하는 구체적인 데이터는 단 두개.
true
false
▽따옴표 안에 안 담겼다.
□
따옴표가 없는 true라는 텍스트는 boolean이다 라는 약속이 돼 있기 때문에 에러가 난다. 변수의 이름으로 사용할 수 없다
이미 우리가 쓰는 컴퓨터 언어에서, 어떤 쓰임이 있는 키워드들, 혹은 앞으로 그런 기능이 채택될 가능성이 있는 키워드들컴퓨터 언어가 이걸 사용하기로 예약돼 있다고 해서reserved word 라고함.
---true와 false라는 불리언을 언제 써?
String은 여러가지 메소드들을 포함하고 있는데,
저기 저 버튼 누르면 바로 사용설명서로 간다
contains라고 하는 메소드는 return true, 그 문자열에 입력값으로 전달할 어떤 값이 들어있다면 true를 리턴하고, 없다면 falsetrue와 false를 return하는 친구다
이 한줄은 true로 리턴된다
boolean이라는 데이터 타입 :
- 그렇다 참이다 그렇지 않다 거짓이다 라고 하는 정보를 표현할 때 사용하는
- true와 false라는 구체적데이터 두가지로 이뤄져 있는
데이터 타입은 정보를 표현할 때 사용한다 !
=====================
3.비교연산자
Comparison Operator
+ : 산술연산자, 왼쪽값 오른쪽값 더해서 새로운 값을 만들어냄
1+1 요만큼을 컴퓨터에게 실행을 하고나면
2로 바뀐다
문자열과 문자열을 결합하는 결합연산자
왼쪾의 1과 오른쪽의 1을 결합해서 문자열 11을 만든다 : 문자열을 만들어내는 연산자
비교연산자는 왼쪽값과 오른쪽 값을 비교해서 결과에 따라 true or false 둘중 하나의 값을 만들어내는 연산자다
>
<
==
>=
=====================
4-1. 조건문 형식
조건문 : Conditional Statement
이걸로 컴퓨터가 똑똑해진다
경우에 따라 다르게 : 이때 사용하는게 if문
if ( boolean ) { 코드 }
() : if문의 ()괄호안엔 boolean만이 값이 될 수 있다. true나 false 둘중 하나만 들어갈 수 있다
{} : 그 뒤에 {}가 오게됨 : () 안의 값이 true면 { } 안에 있는 코드가 실행됨 // false면 실행 안됨
Dead code : 영원히 실행될 리가 없는 코드 //지금 뭐하시는거냐고 알려주는거래
이럴땐 이거 저럴 땐 저거 하려면? if문 두번 써? 그럼 중간에 뭔가 껴들 수 있는 여지가 있다
else를 씀, 이러면 하나의 if문으로 그루핑이 됨
조건문 안에 또 조건문 가능
근데 또 중첩되다보면 복잡하고 통합성이 떨어져 2차원적이야
이걸 1차원적으로 표현하는 방법이 있어
저것과 똑같은 코드
통합적, 1차원적 else if
=====================
4-2. 조건문 응용 1
조건문 어따쓰나?
if문에서 boolean이 들어가는 ()에 값이 true일때도 있고 false일 때도 있어야 됨 그때 쓰임
대표적으로 로그인
String끼리 ==하고 뜻대로 안돼서
디버거 사용
(1) breakpoint 설정
(2) 디버거 실행
두개가 끝
=>여러분들도 코딩하실 때 한줄짜고 확인, 한줄짜고 확인하세요
=====================
4-3. 조건문 응용 2
Run Configurations > Arguments
한칸 띄고 줌. 옆에 목록엔 한번 실행해줘야 뜸
비교연산자에 이은 논리연산자
이렇게 하면 되겠지?근데 이걸 단순하게 만들수가 있어
&& : 다음다음 시간에 자세히
프로그램이 아무리 복잡해보여도 결국 input에 대해 program이 반응해서 output을 만들어내는 기능
input으론
파일의 값을 읽든지
네트워크에서다운로드
사용자가 얘기하는 소리
또는 다른 프로그램의 실행결과
이런 인풋에 대해 프로그램이 순차적으로 실행해서 output을 만들어내는데 그 과정에서 조건문을 사용하게되면 input이 무엇이냐에 따라 조건문이 다르게 프로그램을 동작하게 만들어서 그에 따른 output을 만들어낼 수 있다
=====================
5. == vs equals
자바에는 여러가지 데이터 타입들이 존재함,
여러가지 방법으로 그루핑할 수 있겠지만
primitive냐 아니냐로 구분할 수 있다.
primitive : 원시, 더이상 쪼갤 수 없는 데이터, 7개
이렇게 구분하는 이유는 JAVA가 이 둘을 차별하기 때문
실제 자바가 구현된 방식이 아닌, 머릿속에 이런 이미지가 있으면 많은 현상들이 해석될 수 있다는 목적의 그림
(1)
int p1 = 1이라는 데이터를 만들게되면,
우리 컴퓨터에 메모리상 어딘가에 저 값이 저장될거 아니에요?
p1이라고 하는 변수가 1이라고 하는 값이 위치하는 곳을 가리키는 것
이때 int p2 = 1이라고 하게 되면 이미 1이라고 하는 데이터가 저장돼 있으므로 새로 다른곳에다 또 만드면 데이터 낭비니 p2도 똑같은 1이라고 하는 데이터가 저장된 곳을 바라보게 됨
이 상태에서 p1 == p2 인 동등 비교 연산자를 하게 되면 둘이 같은 곳을 가리키고 있냐를 확인하는 것임 true
원시데이터 타입들은 다 이런식으로 동작한다
와 진짜네! 값이 달라지면 그 값을 새로운곳에 할당하고 거길 가리키게 하는 것인가봐
[Java] == 연산자와 equals() 매서드의 차이
두 값 비교하기 Java 언어에서 두 변수의 값을 비교할 때 '==' 연산자를 이용한다. == 연산자는 Primitive value의 경우 두 변수의 값을 비교하게 된다. Java 에서 Primitive value는 다음과 같이 8가지 종류가
webheck.tistory.com
: String literal은 String Constant Pool이란곳에 저장되는데, 메모리에 해당값이 1개만 존재하고, 두 변수의 값이 같다면 둘다 같은 곳을 가리키고 있다. JVM 내부에서 초기에 비어있는, 문자열 객체를 관리하는 Pool을 생성하고, 이후 String객체의 intern메소드가 호출되면, 이 풀에 해당 문자열과 같은 String 객체가 존재하는 경우 해당 객체를 반환, 존재하지 않는 경우 해당 객체를 풀에 추가하고 해당 객체를 반환. Primitive value도 마찬가지다
*intern은 interning의 약자
▽처음엔 생코가 스택과 힙을 설명 안하려고 이상하게 설명하나? 싶었는데 그냥 받아들이면 되는거였음
->내 착각은 primitive는 스택에 값을 저장하고 (그래서 같은 값을 저장하고 ==를 쓰면 같다고 하는거고) 그 외는 스택에 주소가 저장된다. 그러므로 어떤 변수에는 값이 저장돼 있고, 어떤 변수에는 주소가 저장돼 있다. 라고 말하는줄 앎
->근데 저렇게 보니 변수엔 전부 메모리 주소가 저장돼 있는 것 같아. C에서 배웠던 것처럼. 그리고 primitive방식은 저String literal 방식처럼 어떤 영역안에 같은 값이 있으면 그걸 가리키게 해놓은거고
->▽그래서 call by value, call by reference를 확인해봐야 아는거구나, 원래 변수는 메모리주소정보인데 내부적으로 값을 복사하게 할 수도 있고 뭐 그런
(2)
문자열을 만들 수 있는 두 가지 방법
String o1 = "java";
String o2 = new String("java");
자바에선 이 두가지를 다르게 취급
new를 이용해서 객체를 만들면
이미 "java"가 존재해도 새로운 곳에 만들고 걜 가리킴
이때 o1 == o2 동등비교연산자로 비교하면
동등비교 연산자는 같은곳을 가리키냐? 니까 false
(3)
그럼 어떻게? 원시 데이터 타입이 아닌, 객체들은 equals라고 하는 메소드를 갖고 있다. 둘이 같은가를 내부적으로 계산해서 내용이 같으면 true를 리턴한다
(4)
primitive는 동등비교연산자를 씀. equals를 갖고 있지도 않음
원시데이터 타입이 아닌것을 쓸 땐 equals를 씀
(5)
String은 워낙 자주 사용되고 중요한 애기 때문에 편의성, 성능 이런 이유로 인해 특혜를 받는다
문자열은 같은 값이 있을 때 마치 원시 데이터 타입처럼 동작함
근데?
저번시간에 입력값 받을 때 내용이 같음에도 false였잖아
그 말은 내부적으로 입력값이 다른곳에 저장됐단 말 ▽입력값은 또 다른가보네
▽그렇겠지 이렇게 보면, String[] args가 literal로 하는게 아닌데
(6)
(5)에 의해, 그러므로, 원시데이터 타입이 아닌것들은 equals를 쓰십쇼 심플하게
가장 중요한 건 확인하는 것 검색을 이용해서.
객체라는 건 복합적인 데이터 타입이기 때문에 걔가 어떻게 같냐라는게 비교가 쉽지 않음.
객체들마다 equals가 어떻게 동작하는지가 다를 수 있어
=====================
6.논리연산자
logical operator
비교연산자 : 좌항과 우항을 비교해서 true나 false를 return했었어
논리연산자 : 좌항가 우항이 모두 boolean이 와야해
(1)
&& : and, 앞 뒤 둘다 참이어야 참을 return하는 연산 -> 그 결과로 if문의 ( ) 안에서 할일을 함
*앰퍼샌드(Ampersand, &, and를 나타내는 기호)
(2)
|| : or, 앞 뒤 둘 중에 하나만 참이면 참을 return하는 연산
(3)
! : not, boolean 앞에 쓰면 반대로 바꿔주는
이런코드는 복잡해보여 관리하기 힘들어서 변수로 뺌
=====================
7-1.반복문
Looping statement
반복은 사람이 잘 못하는 일이다.
지루하고 실수하고 너무 많은 시간을 사용함.
이걸 기가 막히게 잘하는 기계가 컴퓨터
사람이 잘 못하는 일을 미루자!
=====================
7-2.배열
=====================
7-3.반복문 + 배열
=====================
8-1.종합응용 1
=====================
8-2.종합응용 1
'생활코딩 JAVA1' 카테고리의 다른 글
JAVA1 7. 작심삼일공학(뇌) (0) 2021.11.09 생활코딩 JAVA1 (4)나의 앱 만들기 --두개 함수 값 공유 (0) 2021.07.31 생활코딩 JAVA1 (3)자바 문서 보는 법 (0) 2021.07.31 생활코딩 JAVA1 (2)데이터타입과 연산, 숫자와 문자, 클래스, 문자열, 변수, 캐스팅, import, 클래스데이터타입, 디버거, 입력과 출력, IDE없이 컴파일과 실행 (0) 2021.07.31 생활코딩 JAVA1 (1)설치, 설정, 실행기본규칙, Run anywhere (0) 2021.07.31