복습

이동원·2024년 3월 10일

저는 처음 입문하여서 진도를 따라가기가 너무 어려워서 주말동안 이제까지 배웠던걸 총 복습해보았습니다 .

#자바를 왜 배우는가 ? 실무에서 많이사용하기때문에
개념만 안다고 넘기지말고 문제를풀어서 내꺼화하자 프로그램은 머리로 하는게 아니고 손으로 해야한다 .

#개발환경설정

  • 빠른속도와 사용의 편의성때문에 인텔리제이사용(컴파일 ,실행 알아서다해줌)
  • 자바로 개발하는 대부분의 회사는 Mac을 사용 (윈도우도무방)

#자바프로그램

  • 자바언어는 대소문자 구분해야함 안그러면 오류발생
  • 클래스(파일을만들었다 생각 , 파일명과 같아야함) 안에 main 메서드 안에 프로그램을 실행
    하는 프로그램 코드들이 들간다. 이걸 스페이스 4번(tap)으로 구분해 깔끔하게 보기쉽게해주자
  • 세미클론 ; 는 문장이 끝날때마다 넣어 구분해 필수 > 컨트롤 +쉬프트+엔터하면 넣어줌
  • 프로그램은 main 을 기준으로 위에서 아래로 한줄씩시작함
  • 주석은 컴퓨터가 읽지못해 무시하고 사람이 읽게함> 메모 남기는용도, 여러줄주석은 / 시작 / 끝
  • 패키지는 자바파일을 구분하기위한 폴더로 첫줄에 package variable; 로 동일하게 선언해야함

자바문법

변수(Variable)

  • 10을 100번출력 인데, 20으로 바꿔 100번출력 하라한다. 일일히 다 손으로 바꿔 ?? X
  • 이름그대로 변할수있는 수로 데이터를 저장하는 그릇
  • 변수를 사용하려면 변수선언 예를 들어 숫자 정수 보관소 int를 사용해보자
    int a; (변수선언) a=10;(변수 초기화=변수처음에넣는값) < 10을 바꿔달라는대로 바꿔주면쉽다.
  • 변수의 값을 변경하면 변수에 들어있던 기존값은 삭제됌.(재활용가능 )
    cf) 자바에서 = 는 오른쪽에있는걸 왼쪽에 저장한다 라는뜻
  • 한번에 여러가지 선언할수도있다 int a,b,c,d ...
  • 변수를 선언과 초기화 한번에 할수있는법 int a; a=10 이렇게했었는데 int a =10;
    cf)변수의종류(type) int >정수(만약 20억넘어가면 long 숫자뒤 L적기 , doublt >실수
    boolean > true , false 만 입력가능 , String >"문자열" , char >'문자하나 '
    tip)컨트롤 + d 는 한줄복사바로됌
  • 변수는 초기화를 꼭시켜줘야 컴파일 오류가 안뜬다

<변수의 명명 규칙>

  • 소문자로 시작하는 낙타표기법(합성어의 첫글자만 대문자) ex) myAccount > 뒤에대문자는 둘이 원래떨어진 단어라고알리는거
    cf) 클래스는 첫글자 대문자로 시작 그다음 낙타표기법 , 패키지는 전부 소문자
  • 변수 이름은 의미있고 그용도를 명확히 설명해야한다

연산자

산술연산자 : 주로 숫자를 계산하는데 쓰임 . 우리가 아는수학연산을 수행

  • 종류는 + , - , * , / (나누기) , %(나머지구하는것)
  • 자바는 문자열에도 +연산자 쓸수있는데 , 이럴때 두문자를 연결해줌
  • 자바는 문자열과 숫자를 더할수도있는데 , 이때 숫자를 문자로 바꿔줌
    즉 문자열과 더하는건 다 문자열이된다
  • 연산자의 우선순위는 수학 우선순위와(상식상) 동일 ex) 괄호쓰면 괄호가 우선
    , 대입연산자 보다 산술연산자를 먼저 int sum = 1 + 2
    tip) 개발에서 가장 중요한 것은 단순함과 명확함이다. 애매하거나 복잡하면 안됌

증감연산자 : 증가 및 감소연산자를 줄여서 증감연산자라함

  • a를 1증가시키려면 a = a+1 을 적어야하는데 쉽게 ++a인 증감연산자로 표현
  • a를 1감소시키려면 a = a -1 을 적어야하는데 쉽게 -- a인 증감연산자로 표현

전위증감연산자

int a = 1; , int b = 0; , b=++a 은 a를 먼저 증가시키고 b에 대입 >출력해보면 a=2 , b=2
후위증감연산자
int a = 1; , int b = 0; , b=a++ 은 a의 현재 값을 b에 먼저대입하고 그후 a값 증가시킴> a=2 ,b=1

cf) 증감연산자를 단독으로 사용하는 경우에는 다른연산이없기 때문에 전위든후위든 결과같다

비교연산자

  • == 같다 , !=다르다 >= , <= 등이있다
    cf)!는 반대 , =는 대입연산자로 변수에 값을대입할때 쓰임
  • 비교연산자를 사용하면 참 거짓 즉 boolean 형이 출력된다.
  • 결과를 boolean 변수에 담을수도있다.
  • 문자는 비교연산자 대신 .equals() 로 비교를한다

논리연산자 : boolean형인 참 거짓 을 비교하는데 쓰임

-&&(and) :둘다 참일때 참 , ||(or) : 둘다 거짓일때 거짓 , ! :참이면 거짓 , 거짓이면 참
ex) int a = 15 ; 일때 a는 10 보다 크고 20보다 작다 boolean result = 10<a && a<20;
출력하면 참

대입연산자 : 값을 변수에 할당하는 연산자, =이다

  • 복합대입연산자 : int a= 5; , a +=3; > a에 삼더하고 대입 , a-=2; > a에 2빼고 대입

if 문 : 특정 조건에 따라서 다른 코드를 실행한다

  • if 문은 특정 조건이 참인지 확인하고 그조건이 참이면 코드 실행, 거짓이면 코드블럭끝으로가 무시

else (그게아니면 )문 : if문에서 만족하는 조건이 없을때 else가 실행한다

  • if문에서 만족하면 수행하고 만약 아니면 else를 수행
  • 더간략하게 바꿀수있다. ex) 만약 18 이상이면 성인 출력 만약 18 미만이라면 미성년자 출력 >
    else로 하면 만약 18 이상이면 성인 출력 그렇지않으면 미성년자 출력

else if : 불필요하게 조건을 검사하는 ( 나이가 5살 이라면 미취학이 이미 출력되는데 나머지 if문

을 통한 조건검사도 모두 실행한다 ) 걸 방지하고 코드 중복방지하여 효율성을 향상시키기위해씀.

  • 앞선 if문 조건이 거짓일때 다음조건을 검사한다 . 만약 if 문이 참이라면 else if 실행 x

cf if 에서 중괄호를 안사용해도 한줄에대한건 출력 가능하지만 두번째 줄에대한건 if문과 별개로 출력 된다
그러므로 중괄호 쓰는게 좋다

삼항(조건) 연산자 : if 문보다 간결한 코드 작성가능

ex )int age = 18 ; , String status = (age >= 18) ? "성인" : :미성년자";
원래는 int age = 18; String satus ; if ( age >=18){status ="성인"; } else { satus = "미성년자")}

반복문 - 특정코드를 반복해 실행하기위해쓰임

  • 반복문(Loop)이 왜필요한가 ?
    예를들어 1을 한번씩 더해서 총 3번더하는 코드 만들어보자
    int count = 0;
    count = count +1; or count++;
    System.out.println("현재 숫자는:"+count);
    count = count +1; or count++
    System.out.println("현재 숫자는:"+count);
    count = count +1; or count++
    System.out.println("현재 숫자는:"+count);

이걸 만약에 100번 반복한다고하면 복붙하기 좀그렇지않나 ?
그리고 코드 를 바꾸거나 출력문구 바꾸려면 일일히 다바꿔야하자나
이런문제를 해결하기위해 배우려하는게 반복문

while문 -조건에 따라 코드를 반복해서 실행할때 사용

while (조건식){코드) :조건식이 참이면 코드 실행 조건식이 거짓이면 while문벗어남
즉 거짓일때까지 무한반복
int count =0;
while( count<3) { count = count +1; System.out.println("현재 숫자는:"+count); }

응용) 1부터 하나씩증가하는 수를 3번 더해라
단순무식하게
int sum = 0;
sum= sum+1;
System.out.println("i="+1+" sum="+sum);
sum= sum+2;
System.out.println("i="+1+" sum="+sum);
sum= sum+3;
System.out.println("i="+1+" sum="+sum);

만약 10부터 하나씩증가하는 수를 3번더하라고 변경이되면 바꿀게많다 so
변경에 취악하므로 변경되는 부분을 변수 i로 만들어보자
int sum = 0;
int i =1;
sum= sum+i;
System.out.println("i="+1+" sum="+sum);
i++;
sum= sum+i;
System.out.println("i="+1+" sum="+sum);
i++
sum= sum+i;
System.out.println("i="+1+" sum="+sum);
즉 변수 i 덕분에 i의 값만 변경하면 나머지 코드를 전혀 변경하지않아도됌

새로운문제 : i부터 하나씩 증가하는 수를 endNum(마지막수) 까지 더해라
이럴때 while 문을 쓰는거다 이것도 1부터 하나씩 증가하는 수를 3번더해라
int sum =0;
int i =1;
int endNum = 3;
while(i<=endNum){"i="+i+" sum="+sum);}
i++

do-while문 은 while 문과 비슷하지만 조건에 상관없이 무조건 한번은 코드실행

조건에 만족하진 않아도 한번은 현재값을 출력하고싶을때 사용
int i =10;
do{System.out.println("현재 숫자는:"+i); i++; } while(i<3) ;
일단실행은하고 조건문만남

break는 반복문을 즉시 종료하고 빠져나가는 키워드

continue는 나머지 부분을 건너뛰고 다음 반복으로 진행하는데 사용 키워드 즉 조건식으로 다시이동

ex) 1부터 시작해서 숫자를 계속 누적해서 더하다가 합계가 10보다 처음으로 큰값은 얼마인가
int sum = 0;
int i =1;
while(true){sum=sum+1; if(sum>10) {System.out.println("합이 10보다 크면종료: i="+i+"sum="+sum );
break; }
i++;}

1부터 5까지 숫자를 출력하는데 숫자가 3일떄는 출력을 건너뛰어라
int i = 1;
while(i <= 5){System.out.println(if(i == 3) { i++; continue} System.out.println(i); i++}}

for 문(초기식(주로 반복횟수와 관련된 변수 선언할때 사용); 조건식; 증감식;{코드}
ex) i부터 하나씩 증가하는 수를 endNum(마지막수) 까지 더해라
int sum =0;
endnum =3;
for(int i =1; i<=endNum;i++ ){sum = sum+i; System.out.println("i="+i+"sum=+sum);}

  • while(true) = for( ; ;)

이중반복문 : 반복문 안에 반복문 예를들어 구구단
ex) for(int i = 1; i<=9; i++){for(int j =1; J<=9; j++){ System.out.println(i+""+j+"="+ij);}

배열 : 같은 타입의 변수를 사용하기 편하게 하나로 묶어둔것

  • 같은 타입의 변수를 반복해서 선언하고 반복해서 사용하는 문제를 해결하기위해 쓰임
    ex) 학생 5명 점수를 출력해보자 >반복문으로 해결할거같으나 no , why? 변수명은 더하고 뺄수없이 그대로써야함

  • 배열 선언 : int[] students;(인트배열변수선언) ,students=new int[5];(배열생성)

    연결된 5개 그릇이 있는 인트형변수 5개만든다는 뜻

  • 배열을 생성하고 나면 자바는메모리 어딘가있는 이 배열에 접근할수있는 참조값(주소)를 반환
    int[] students = new int[5]; 배열생성 , int[] students =x00l ; new int[5]의 결과로 참조값반환
    students = x001 로 최종결과가나옴 > 참조값 반환하느 이유는 int 배열에 접근하기위해서

  • 배열 사용 : [] 사이에 숫자 번호를 넣어줘야하는데, 배열의 위치를 나타내는숫자를 인덱스라함
    cf) 배열은 0부터 시작한다.
    즉 배열을 사용하면 참조값을 통해 실제 배열에 접근을하고 인덱스를 통해 원하는요소 찾는다.

ex) int[] students; (배열변수선언)
students = new int[5]; (배열 생성)
(변수값대입)
students[0] = 90; ,students[1] = 80; ,students[2] = 70; ,students[3] = 60; ,students[4] = 50;
(변수값사용)
for(int i =0; i<5; i++){System.out.println("학생"+(i+1)+"점수"+student[i];)}
여기서 특별한게 배열변수.length 라는 특별한 기능이있다. 즉 i<5 대신 사용가능.
또한 배열생성과 초기화를 동시에 할수있는데 ,
int[] student= new int[]{90,80,70,60,50};
for(int i =0; i<5; i++){System.out.println("학생"+(i+1)+"점수"+student[i];)}

1개의 댓글

comment-user-thumbnail
2024년 3월 12일

와우.... 우리 동원님 쵝오에요... 진짜 열심히 해주시는 모습이 정말 내 멘토 생활의 원동력입니다 :-)

답글 달기