교육 (Today I Learned)/SeSAC

SeSAC 8일차 / 자바 기초(조건문, 반복문, 클래스)

Bay Im 2023. 7. 27. 00:35
SeSAC 8일차(2023-07-26)
자바 기초(조건문, 반복문, 클래스)


조건문

 

- 비교 연산자

==, !=, <, >, <=, >=

 

 

- 논리 연산(bool연산)

&&, ||, !, ^(두 조건이 같으면 false)

 

 

 

- if

if( )true가 오면 { } 안의 코드 실행

( )false가 오면 else 문의 { } 실행

 

ex)

int score = 85;

if (score>=90) {

           sout(“합격”);

} else {

           sout(“불합격”);

}

 

 

- 중첩 if

if 문 안에 또다른 if 문 사용 가능

else 문 안에 또 다른 if 문 사용가능

else 안에 중첩된 if 문은 else if 문으로 대체

 

ex)

if (score >= 100) {

           sout(“만점”);

} else if (score >= 80) {

           sout(“합격”);

} else {

           sout(“불합격”);

}

 

 

 

- switch

( ) 안의 결과와 case 문의 값과 비교

case의 비교 값과 일치하면 해당 case의 실행문장 수행

break를 만나면 switch 문을 벗어남, 없으면 다음 case 문 실행

case의 비교 값과 일치하는 것이 없으면 default 문 실행(생략 가능)

 

ex)

Scanner scanner = new Scanner(System.in);

String rat = scanner.next();

 

switch (rat) {

           case “vvip”:{

                      sout(“태블릿 사은품 증정”);

                      break;

                      // vvip는 태블릿만 증정

           }

           case “vip”:{

                      sout(“키보드 사은품 증정”);

                      // vip는 키보드, 마우스, 수건 증정

           }

           case “gold”:{

                      sout(“마우스 사은품 증정”);

           }

           default:{

                      sout(“수건 사은품 증정”);

    }

}

scanner.close();

 

 

 

- 문자열 비교

자바에서 문자열은 레퍼런스 타입이기 때문에 일반적인 비교연산자 사용 불가

문자열 간의 일치 조건을 판단하기 위해 equals() 사용

 

ex)

Scanner scanner = new Scanner(System.in);

String rat = scanner.next();

 

if (rat.equals(“vvip”)) {

           sout(“태블릿 사은품 증정”);

} else if (rat.equals(“vip”)) {

           sout(“키보드 사은품 증정”)’

} else if (rat.equals(“gold”)) {

           sout(“마우스 사은품 증정”);

} else {

           sout(“수건 사은품 증정”);

}

scanner.close();

 

 

 

 

 

반복문

 

반복문의 종류:

for , while , do-while , for-each

 

 

- 대입 연산자

기존 변수에 연산작업을 진행하고 결과 값을 기존 변수에 재할당

+=, -=, *=, /=

 

 

- 증감 연산자

1값에 대한 누적 더하기와 누적 빼기에 대한 연산자

++, --

 

 

 

- for

 

기본 형태)

for(변수초기화; 조건; 변수변화식) {

           반복실행코드

}

 

for 문은 조건이 true이면 { } 영역 코드를 실행

변수는 for 문의 { } 영역 내부에서 사용 가능

한번의 { } 영역 코드 실행이 끝나면 변수 변화식 실행

조건이 false가 될때까지 반복

 

ex1)

for(int i =0; i<=10; i++) {

           sout(i);

}

 

ex2)

int a;

for(a=1; a<10; a*=2) {

           sout(a);

}

 

 

 

- while

while 문의 ( ) 안의 값이 true이면 반복, false이면 반복 중지

먼저 ( )의 조건을 보고 반복 결정하여 { } 영역 코드 실행

 

ex1)

// 코드 무한 반복

while (true) {

           Code

}

 

ex2)

int i = 0;

while(i < 10) {

           sout(i);

           i++;

}

 

 

 

- do-while

do { } 영역 코드를 실행하고 while ( )의 조건을 보고 다음 반복 결정

적어도 한번은 실행

 

ex1)

// 코드를 무한반복

do{

           Code

}

while (true)

 

ex2)

int i = 0;

do {

           sout(i);

           i++;

} while (i<10);

 

 

 

- 반복문 다루기

break:

반복문을 중단시킴

 

 

continue:

반복문을 다음순서로 바로 진행시킴

반복문 내에서 continue 명령어가 나오면 다음 코드를 실행시키지 않고 다음 반복의 시작점으로 점프

 

ex)

for(int i=0; i<=10; i++) {

           // i3일 때 출력없이 건너뜀

           if (i == 3) {

                      continue;

           }

           // i6일 때 반복 중지

           if (i == 7) {

                      break;

           }

           sout(i);

}

=> 123456 출력

 

 

 

- 중첩 반복문

반복문 안에 반복문이 중첩되어 작성

(for문안에 또다른 for, while문안에 for)

 

 

 

- for-each

 

기본 형태)

for (변수정의: 자료구조) {

           실행코드

}

 

자료 구조안의 데이터 개수만큼 반복

자료구조 안의 데이터가 순서대로 변수에 할당

 

ex)

int nums[] = {1, 2, 3, 4, 5};

for(int n: nums) {

           // 배열 내부 데이터 하나씩 출력

           sout(n);

}

 

 

 

 

 

객체 지향 자바1

 

- 클래스(class)

 

클래스의 목적:

복잡한 데이터의 구조와 기능을 하나의 캡슐화하여 인터페이스로 사용

코드의 가시성을 높여주고 유지보수성을 높여준다,

 

 

클래스의 특징:

기본적으로 필드와 메소드를 포함

메모리의 힙 영역에서 더 이상 쓸모 없을 때까지 계속 존재(가비지 컬렉터)

메모리에 생성(초기화)된 클래스는 인스턴스

 

 

 

- 클래스와 인스턴스

코드 상태인 클래스, 실체가 존재하는 인스턴스

 

코드로 정의한 클래스:

Class MyClass{

    Code

}

 

클래스가 생성(초기화)되어 메모리에 존재하는 인스턴스:

new MyClass();

 

ex)

붕어빵 틀(클래스)-> 붕어빵(인스턴스)

자동차 설계도(클래스)-> 자동차(인스턴스)

 

 

 

- 클래스 기본구조

 

// 클래스 정의

접근지정자 class 클래스이름{

           // 필드 정의

           접근지정자 변수정의;

 

           // 생성자 정의

           접근지정자 클래스이름(초기화인자) {

                      초기화코드

           }

 

           // 메소드 정의

           접근지정자 반환타입 메소드이름(인자) {

                      기능코드

           }

}

 

ex)

public class Member {

           // 필드 정의

           public int id;

           private String name;

          

           // 생성자 정의

           public Member(int id, String name) {

                      this.id = id;

           }

 

           // 메소드 정의

           public String getName() {

                      return this.name;

           }

}

 

 

 

- 접근 지정자

클래스 내부에 정의된 요소의 접근 범위를 지정

 

public: 모든 외부 클래스에서 접근 가능

protected: 동일 패키지와 자식 클래스에서 접근 가능

생략(default): 동일 패키지 내에서만 접근 가능

private: 요소가 생성된 클래스 내부에서만 접근 가능

 

 

 

- 필드

클래스 내부에서 정의되는 변수

인스턴스로 생성될 때 초기화

정의에서 데이터 할당을 생략하면 null 값으로 초기화

 

ex)

// 필드 정의(인스턴스 생성시 초기화)

public int id;

private String name;

private int point = 0;

 

 

 

- static

인스턴스가 생성이 안돼도 접근 가능한 필드 또는 메서드 생성

특정 메모리공간에 미리 초기화

 

ex)

// static 필드 정의 (미리 초기화)

public static int meta = 2342;

 

 

 

- this

클래스 내부에 속한 멤버를 명시적으로 가져올 때 사용

객체 자신에 대한 레퍼런스, this.멤버

this는 사용한 위치에 속한 레퍼런스로 가져오기 때문에 내부클래스나 익명클래스 사용시 주의

 

 

this의 활용:

메소드 내부의 로컬변수와 필드변수 이름이 같아 구별할 때

다른 메소드 호출 시 객체 자신의 레퍼런스를 전달할 때

메소드가 객체 자신의 레퍼런스를 반환할 때

 

 

 

 

 

오늘의 실습 코드: https://github.com/yubin-im/SeSAC/tree/70824d99509fce2e956827f73f694834377df7a1/20230726