[TIL 1] 자바 복습 내용 정리

돗치·2024년 1월 31일

자바 개발 4가지 플랫폼: JavaSE, JavaEE, JavaME, JavaFX

JavaSE: 일반 PC, 서버, 고사양 시스템 들을 위한 표준 자바 플랫폼
대부분의 패키지가 포함된 에디션 ex) java.lang.* , java.util.* , java.io.*

Java EE: 자바를 이용해 서버측 개발하는 플랫폼
JSP, Sevlet, JNDI 등을 포함한 개발에 주로 사용

Java ME: 모바일과 같은 한정된 자원을 가진 곳을 지원

JDK: JavaSE 개발 환경 구축하기 위해서 설치하는 프로그램

JDK설치 시 PC에 설치되는 것들: JVM, API, TOOL

자바 프로그램을 구동하는 프로세서: JVM

package com.example.helloworld;     // com.example.helloworld.HelloWorld로 클래스 생성

public class HelloWorld {
			public static void main(String[] args) {
						System.out.println("Hello World");
			}
}

객체 지향 프로그래밍: 클래스 단위로 프로그래밍을 하는 것

객체 단위로 프로그래밍: 인간 중심 관점 = 클래스 단위로 프로그래밍: 프로그래밍 관점

Java 메인 클래스
- main 메서드를 가지고 있는 클래스 (main 메서드: 프로그램의 시작점(진입점))

  • 많은 클래스 중에 메인 클래스는 딱 1개 존재
  • 메인 클래스 부터 프로그램이 시작 됨
public class Prac {
			public static void main (string[] args){
			}
}
public class Calculator2 {
    public static void main(String[] args) {
        int a, b;
        a=1;
        b=2;
        System.out.println(a+b);
    }
}
//클래스 단위 코딩
public class Calculator {   //클래스(객체)
    //main(){ }메서드
    public static void main(String[] args) {        //동작, 처리를 하기 위해서는 메서드가 필요
        //두 개의 정수를 더하여 출력하는 자바 프로그램 만들기
        int a, b, c;
        a=1;
        b=1;
        c = a + b;
        System.out.println(c);
    }
}

메서드(Method): 특정 동작(method) 기능 처리 하는 함수
함수: 기능(funtion)

동작의 이름 (매개변수){
	~처리할 코드~
}

JAVAEE를 하게 되면 service라는 메서드가 main역할을 함

실행코드, 실행 가능한 파일은 .class (byte code=중간어 코드) -> 파일 내에 out이라는 파일 생김
소스코드, 소스 파일(클래스 이름)은 .java로 저장. 자바에서 제공해주는 API(클래스들의 집합)을 사용하여 개발

API: JAVA에서 제공하는 여러 도구(class)를 이용해서 sw를 만드는 것. 프로그램 작성 중에 필요한 외부 라이브러리, 클래스 모듈이 필요할 때가 있음 // JDK설치 하면 안에 API가 탑재가 됨

cls = 전에 터미널 사용했을 때 이를 입력하면 다 지워짐
dir = 디렉토리 구조 보여줌
java -version = 자바 버전 나옴
cd src = change directory

java.exe라는 명령어는 java프로그램을 구동하는 jvm 호출. 이에 의해서 클래스 파일이 메모리 위로 로딩 돼서 실행 됨.

JVM이란?

  • 자바 프로그램을 구동해주는 프로세서(엔진)

  • JDK (개발) 안에 JRE (실행 환경)안에 JVM이 들어있음

  • JVM이 있으면 어떤 OS든(윈도우, 맥) 실행 가능

  • .java인 파일을 컴파일하면 .class파일로 만들어짐 어떤 os에서 실행할지 모르기 때문에 .exe로 만들어지는게 아님

  • 1차 컴파일된 bytecode(.class)를 자신의 os에 맞게 2차로 한 번 더 컴파일, exe메모리에 로딩하여 실행 자바 프로그램(bytecode(.class))을 윈도우에서 만들면 맥에 맞게 중간어 코드를 내부적으로 한 번 더 .exe로 컴파일 독립적(OS에 상관없이 실행)

C:>java.exe HelloWorld : 실행 ->RPC(원격프로세서호출): 내부적으로 JVM을 호출
Run(실행)하는 순간(java.exe 동작) java.exe에서 HelloWorld 실행. 이때 JVM 동작, HelloWorld를 찾아서 메모리에 로딩하고 .class기 때문에 os맞게 .exe로 만들어서 실행. class loader에서 로딩 시키고 exe코드 만들어서 Execute동작

JVM Memory model

JVM이 class파일을 execute할 때 4가지 형태의 메모리를 이용해서 구동
(Method Area, Heap Area Generation, Stack Area, Runtime Constant Pool)

자바의 컴파일 명령어: javac.exe
자바의 실행 명령어: java.exe


변수: 데이터를 저장하는 메모리 공간의 이름
자료형: 변수의 크기와 어떤 종류의 데이터를 저장할 것인지를 결정하는 것
할당: 변수에 데이터를 저장하는 것

public class Operator {
    public static void main(String[] args) {
        //두 과목의 점수를 이용하여 총점과 평균을 구하는 JAVASE프로그램 만들기
        int kor, eng;
        kor = 90;
        eng = 100;
        int tot;
        tot = kor + eng;
        System.out.println("총점: "+tot);
        System.out.println("평균: "+tot/2);
    }
}

변수 이름 조건?

  • 숫자 시작 불가
  • 대소문자 구분, 길이 제한 없음
  • $, _이외 특수 문자 불가
  • 키워드(예약어)는 변수 이름 사용 불가 (int, if, double, etc)

변수 종류

  • 멤버 변수(인스턴스 변수)
  • 클래스 변수(스태틱 변수)
  • 지역변수
  • 매개변수

변수 생성 시 고려할 것?

  • 크기, 데이터 종류
  • int, float, char, boolean: 기본 자료형
  • Book, Member, etc: 사용자 정의 자료형

선언: 자료형과 변수가 만나는 것 (int a) -> 변수가 메모리에 만들어짐

public class CarTest {
    public static void main(String[] args) {
        //자동차의 정보를 저장
        String model = "BMW528i";   //문자열 저장, ""= 초기화
        System.out.println("model = "+model);
        long distance = 100000;
        System.out.println("distance= "+distance+"km");
        int price = 9000000;
        System.out.println("price = "+price);
        char type = 'A';
        System.out.println("type = "+ type + " Type");
        String company = "BMW";
        System.out.println("company = "+company);
        boolean auto = true;
        System.out.println("auto = "+ auto);
        int year = 2000;
        System.out.println("year = "+year);
        float gasmi = 12.5f; // double ~~ = 12.5
        System.out.println("gasmi ="+gasmi+"l");

    }
}

할당: 변수에 지정된 데이터 타입에 맞게 데이터를 저장(대입)하는 행위
초기화: 변수를 만들고 난 후 연산을 하기 전에 값을 저장하는 행위
-> 초기화 하지 않으면 쓰레기 값 들어감 = 연산 불가

자료형 종류?
기본 자료형: 프로그램에서 기본 제공
사용자 정의 자료형: 사용자가 만들어서 사용(class 이용)

Symbol Table? 변수 관리하는 테이블에 변수 정보 저장 됨 - 변수가 메모리에서 만들어지기 때문에 관리 해야 함

프로그래밍의 3대 요소 → 변수, 자료형, 할당
자료형 → 변수의 크기와 어떤 종류의 데이터를 저장할 것인지 결정하는 것

public class VDATest {
    public static void main(String[] args) {
        //정수를 한개 저장하기 위해 변수 선언하기
        int v;
        v=10;
        System.out.println("v = "+v);
        int a=10;
        int b=a;
        int c=b*10;
        System.out.println("c = " + c); //soutv 하면 바로 위 코드 출력
        //sum에 1~5를 누적해서 출력
        int sum=0;    //sum은 지역변수 -> =0으로 초기화 안하면 오류 남
        sum = sum+1;
        sum = sum+2;
        sum = sum+3;
        sum = sum+4;
        sum = sum+5;
        System.out.println("sum = " + sum);
        //x=10, y=20저장하고 변수 값 서로 교환 //swap
        int x=10;
        int y=20;
        System.out.println("x="+x+":"+"y="+y);
        int tmp;
        tmp=y;
        y=x;
        x=tmp;
        System.out.println("x="+x+":"+"y="+y);

    }
}
//패키지 확인해보기
import java.util.Arrays;

public class FindAPI {
    public static void main(String[] args) {
        int a;
        a = 10;
        System.out.println("a= "+a);
        java.lang.String s;     //패키지 경로 
        s="APPLE";
        System.out.println("s = " + s);
        System.out.println(s.length());

    }
}

10, 2, 8, 16진수 출력 연습

public class BinaryTest {
    public static void main(String[] args) {
        int a = 10;
        float f = 35.6f;    //기본 소수 type을 double로 인식하니까 f추가
        boolean b=false;
        char c='A';
        String s="APPLE";
        //69를 10, 2, 8, 16진수로 출력
        int decimal=69;
        System.out.println("decimal = " + decimal);
        int binary = 0b01000101;
        int octal = 0105;
        System.out.println("octal = " + octal);
        int hexa = 0x45;
        System.out.println("hexa = " + hexa);
        
    }
}

문자형 연습

public class CharTest {
    public static void main(String[] args) {
        char c='A';
        System.out.println("c = " + c);
        int a='A';
        System.out.println("a = " + a);
        int b = 'B'+1;
        System.out.println("b = " + (char)b);
        //'가'라는  한 문자를 변수에 저장하고 출력
        char han = '가';
        System.out.println("han = " + han);
        int hanD = '가';
        System.out.println("hanD = " + hanD);
        int hanU = '\uAC00';
        System.out.println("hanU = " + (char)hanU);
        //대문자 'A'를 소문자 'a'로 변환
        char upper='A';
        char lower=(char)(upper+32);
        System.out.println("lower = " + lower);
        char lower1 = 'u';
        int upper1 = lower1 - 32;
        System.out.println("upper1 = " + (char)upper1);
        //'1' + '2' = 3나오도록 하기
        int data = '1' + '2';
        System.out.println("data = " + data);
        //0의 아스키코드 =48
        char i ='1';
        char j ='2';
        //int sum = (i-48)+(j-48);
        int sum = (i-'0')+(j-'0');
        System.out.println("sum = " + sum);
    }
   
    
}

형 변환: 값의 타입을 다른 타입으로 변환하는 것

자동형변환(묵시적): 작은 type이 큰 type에 저장되는 경우 (byte → int)

강제형변환(명시적): 큰 type이 작은 type에 저장되는 경우(int→byte) = 손실발생

public class CastingTest {
    public static void main(String[] args) {
        float f1 = .10f;
        System.out.println("f1 = " + f1);
        float f2 = 15f;
        System.out.println("f2 = " + f2);
        float f3 = 3.14f;
        System.out.println("f3 = " + f3);
        double d1 = 123.4567;
        System.out.println("d1 = " + d1);

        float x = 15.6f;
        int y=(int)x;       //강제 형변환(손실 발생) float 에서 int는 byte는 4로 같지만 손실 발생
        System.out.println("y = " + y);
        char c = 'A';
        int cc = c;         //자동 형변환,  (int)안해도 됨
        System.out.println("cc = " + cc);

        int dd=  5;
        double ddd= dd;     //자동 형변환
        System.out.println("ddd = " + ddd);

        double dx = 14.67;
        int dy = (int)dx;           //강제 형변환 , 큰 바이트가 작은 바이트로 안 됨
        System.out.println("dy = " + dy);
    }
}

자료형 분류 대표 2가지: 기본자료형, 사용자정의자료형

아스키코드: 7bit로 이루어진 영문 알파벳을 수치형으로 만들어 놓은 문자인코딩

유니코드: 비 영어권의 모든 문자를 수치형으로 만들어 놓은 문자인코딩

‘A’와 ‘a’의 아스키 코드 값 차이 = 32

개발자가 다루는 데이터는 거의 다 객체 데이터임.

객체데이터: 하나의 구조(변수)로 이루어진 데이터가 아닌 여러 구조(변수)로 이루어진 데이터

객체데이터를 변수에 저장하기 위해서 새로운 자료형 필요.

개발자가 직접 자료형을 만들어서 사용 (사용자정의 자료형)

class: 새로운 자료형을 만드는(=설계, = 모델링)하는 도구

새로운 자료형 사용 방법

  1. 변수 선언 ex. Book b;
  2. 객체 생성 ex. new Book()
  3. 생성된 객체 연결(저장) ex. b = new Book();

ex. 한 권의 책을 변수에 저장하기 위한 객체 생성

Book b=new Book();

Book 클래스 코드

public class Book {
    public String title;
    public int price;
    public String company;
    public String author;
    public int page;
    public String isbn;
}
public class BookTest {
    public static void main(String[] args) {
        //정수 한개를 저장할 변수 선언
        int a;
        a=10;
        System.out.println("a = " + a);
        //한권의 책 데이터를 저장하고 출력
        String title = "자바";
        int price = 30000;
        String company = "출판사";
        String author = "김가네";
        int page = 700;
        String isbn = "ISBN-111990011";
        System.out.println(title + "\t" + price + "\t" + company+"\t"+ author+"\t"+page+"\t"+isbn);     // \t = 탭키
        //책 한권 저장할 변수
        Book b;

    }
}
public class BookExam {
    public static void main(String[] args) {
        //정수 1개 저장할 변수
        int a;
        a=10;
        // 책 1권 저장할 변수
        //Book b;
        //b = new Book();
        //한권의 책 데이터를 저장하기 위해 객체 생성(인스턴스 생성)
        Book b = new Book();
        b.title ="자바";
        b.price=30000;
        b.company="출판사";
        b.author="김가네";
        b.page = 700;
        b.isbn="1199110";
        System.out.println(b.title+"\t"+b.price+"\t"+b.company+"\t"+b.author+"\t"+b.page+"\t"+b.isbn+"\t");
    }
}

Member 클래스 코드

public class Member {
        public String name;
        public int age;
        public String tel;
        public String email;
        public String addr;
        public float weight;

}
public class MemberTest {
    public static void main(String[] args) {
        Member m = new Member();
        m.name = "홍길동";
        m.age=30;
        m.tel="010-1111-1111";
        m.email = "abc@naver.com";
        m.addr="서울";
        m.weight=57.6f;
        System.out.println(m.name+"\t"+m.age+"\t"+m.tel+"\t"+m.email+"\t"+m.addr+"\t"+m.weight);
    }
}

Movie 클래스 코드

public class Movie {
    public String mtitle;
    public String mday;
    public String mmajor;
    public String mpart;
    public int mtime;
    public int mlevel;

}
public class MovieTest {
    public static void main(String[] args) {
        //영화 데이터를 저장하고 출력
        Movie mv = new Movie();
        mv.mtitle="아바타";
        mv.mday="2022.12.14";
        mv.mmajor="제이크 설리";
        mv.mpart="액션";
        mv.mtime=192;
        mv.mlevel=12;
        System.out.println(mv.mtitle+"\t"+mv.mday+"\t"+mv.mmajor+"\t"+mv.mpart+"\t"+mv.mtime+"\t"+mv.mlevel);
    }
}

new, 생성자 메서드: 객체를 생성할 때 사용하는 연산자와 메서드

속성, 멤버변수, 프로퍼티 :클래스 안에 만들어지는 변수

dot(도트연산자): 클래스 안에있는 멤버변수를 참조하는 연산자

배열 : 동일한 데이터를 여러 개를 연속적으로 만드는 방법 ex. int[] a = new int[5];

자료형 변수 int a; Book b; String s; 정수 한 개, 책 한 권, 문자열 한 개

자료형[] 변수 int[] a; Book[] b; String[] s; 정수 여러 개, 책 여러 권, 문자열 여러 개

public class ArrayBasicTest {
    public static void main(String[] args) {
        //[정수 3개]를 저장할 변수 선언하고 모두 10저장
        //데이터 수 늘어나면 데이터 처리 복잡
        int a,b,c;
        a=10;
        b=10;
        c=10;
        int sum = a+b+c;
        System.out.println("sum = " + sum);
    }
}
public class ArrayMake {
    public static void main(String[] args) {
    //정수 5개를 저장할 배열 생성
        int[] a= new int[5];
    //반복문
        for(int i=0; i<a.length; i++){
            a[i]=10;
            System.out.println(a[i]);
        }

        float[] f=new float[5];
        Book b1,b2,b3;
        Book[] b=new Book[3];
    }
}
public class ArrayTest {
    public static void main(String[] args) {
        float[] f=new float[5];
        f[0] = 10.5f;
        f[1] = 15.5f;
        f[2] = 50.5f;
        f[3] = 70.5f;
        f[4] = 88.5f;

        for(int i=0; i<f.length;i++){
            System.out.println(f[i]);
        }

        int[] a={10,20,30,40,50};
        for(int i=0; i<f.length;i++){
            System.out.println(a[i]);
        }

        int sum=a[0]+a[3];
        System.out.println("sum = " + sum);
        System.out.println(a.length);
        int[] b=new int[3];
        System.out.println(b[0]);
        System.out.println(b[1]);
        System.out.println(b[2]);

        int[] c={10,20,30,40,50};

    }
}
public class ArrayExam {
    public static void main(String[] args) {
        int a;
        a=10;

        //정수 3개 저장 변수
        int[] b = new int[3];
        b[0]=10;
        b[1]=20;
        b[2]=30;
        int[] x={1,2,3,4,5};
        for(int i=0; i<x.length;i++){
            System.out.println(x[i]);
        }
        char[] c={'A','P','P','L','E'};
        System.out.println((char)(c[0]+32));
        System.out.println((char)(c[1]+32));
        System.out.println((char)(c[2]+32));
        System.out.println((char)(c[3]+32));
        System.out.println((char)(c[4]+32));

        for (int i=0; i<c.length;i++){
            System.out.println((char)(c[i]+32));
        }
    }
}
public class BasicArrayTest {
    public static void main(String[] args) {
        float[] f={24.5f, 45.6f, 77.65f};
        System.out.println(f[0]);
        System.out.println(f[1]);
        System.out.println(f[2]);

        Book[] b = new Book[3];
        b[0]=new Book();
        b[0].title="자바";
        b[0].price=30000;
        b[0].company="출판사";
        b[0].author="김가네";
        b[0].page=500;
        b[0].isbn="11889900";
        //System.out.println(b[0].title+"\t"+b[0].price+"\t"+b[0].company+"\t"+ b[0].author+"\t"+b[0].page+"\t"+b[0].isbn);
        b[1] = new Book();
        b[1]=new Book();
        b[1].title="오라클";
        b[1].price=30000;
        b[1].company="출판사";
        b[1].author="김가네";
        b[1].page=500;
        b[1].isbn="11800990";
        //System.out.println(b[1].title+"\t"+b[1].price+"\t"+b[1].company+"\t"+ b[1].author+"\t"+b[1].page+"\t"+b[1].isbn);
        b[2] = new Book();
        b[2]=new Book();
        b[2].title="파이썬";
        b[2].price=30000;
        b[2].company="출판사";
        b[2].author="김가네";
        b[2].page=500;
        b[2].isbn="11778890";
        //  System.out.println(b[2].title+"\t"+b[2].price+"\t"+b[2].company+"\t"+ b[2].author+"\t"+b[2].page+"\t"+b[2].isbn);
        for (int i=0; i<b.length; i++){
            System.out.println(b[i].title+"\t"+b[i].price+"\t"+b[i].company+"\t"+ b[i].author+"\t"+b[i].page+"\t"+b[i].isbn);
        }
    }
}

다차원 배열

행, 열로 데이터 저장하기(2차원 배열, 테이블구조, 행렬)

int[][] a=new int[행][열];

public class ObjectArrayExam {
    public static void main(String[] args) {
        //영화 3편 저장할 배열 생성, 데이터 저장 및 출력
        Movie[] m= new Movie[3];
        m[0]= new Movie();
        m[0].mtitle="A영화";
        m[0].mmajor="김씨";
        m[0].mtime=160;
        m[0].mlevel=15;
        m[0].mday="2024-01-14";

        m[1] = new Movie();
        m[1]= new Movie();
        m[1].mtitle="B영화";
        m[1].mmajor="이씨";
        m[1].mtime=160;
        m[1].mlevel=15;
        m[1].mday="2024-01-15";

        m[2] = new Movie();
        m[2]= new Movie();
        m[2].mtitle="C영화";
        m[2].mmajor="야씨";
        m[2].mtime=160;
        m[2].mlevel=15;
        m[2].mday="2024-01-16";

        for(int i=0; i<m.length;i++){
            System.out.println(m[i].mtitle+"\t"+m[i].mmajor+"\t"+m[i].mtime+"\t"+ m[i].mtime+"\t"+m[i].mlevel+"\t"+m[i].mday);
        }

    }
}
public class TwoDimArrayTest {
    public static void main(String[] args) {
        int[][] a = new int[2][4];
        a[0][0]=10;
        a[0][1]=20;
        a[0][2]=30;
        a[0][3]=40;
        a[1][0]=50;
        a[1][1]=60;
        a[1][2]=70;
        a[1][3]=80;
        System.out.println(a[0][0]+"\t"+a[0][1]+"\t"+a[0][2]+"\t"+a[0][3]);
    }
}
public class TwoDimArrayInit {
    public static void main(String[] args) {
        int[][] a = {
                {1, 2, 3, 4},
                {5, 6, 7, 8}
        };

        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                System.out.print(a[i][j] + "\t");
            }
            System.out.println();
        }

        char[][] b = new char[5][];
        b[0] = new char[1];
        b[1] = new char[2];
        b[2] = new char[3];
        b[3] = new char[4];
        b[4] = new char[5];

        for (int i = 0; i < b.length; i++) {
            for (int j = 0; j < b[i].length; j++) {
                b[i][j] = '☆';
                System.out.print(b[i][j] + "\t");
            }
            System.out.println();
        }
    }
}

배열: 동일한 데이터를 연속적으로 여러 개 저장할 수 있는 자료구조

length: 배열의 길이를 구하는 속성

객체배열: 객체를 저장하는 배열

Scanner scan = new Scanner(System.in); scan.close();

Scanner은 java.util.Scanner에 들어있음

import java.util.*;

public class ScannerTest {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("정수를 입력하세요.: ");
        int num=scan.nextInt(); //정수 하나를 읽기 위해
        System.out.println("scan = " + scan);

        System.out.println("실수를 입력하세요.: ");
        float f=scan.nextFloat();
        System.out.println("f = " + f);

        System.out.println("문자를 입력하세요.: ");
        String str =scan.next();
        System.out.println("str = " + str);

        scan.nextLine(); //버퍼 비우기(스트림 비우기)

        System.out.println("문자를 입력하세요.: ");
        String str1 =scan.nextLine();
        System.out.println("str1 = " + str1);

        scan.close();
    }
}
import java.util.Scanner;

public class ScannerExam {
    public static void main(String[] args) {
        //도서정보 입력받기
        Scanner scan = new Scanner(System.in);
        System.out.println("제목: ");
        String title=scan.nextLine();
        System.out.println("title = " + title);

        System.out.println("가격: ");
        String price=scan.nextLine();
        System.out.println("price = " + price);

        System.out.println("출판사: ");
        String company=scan.nextLine();
        System.out.println("company = " + company);

        System.out.println("저자: ");
        String author =scan.nextLine();
        System.out.println("author = " + author );

        System.out.println("페이지: ");
        String page =scan.nextLine();
        System.out.println("page = " + page );

        System.out.println("ISBN: ");
        String isbn =scan.nextLine();
        System.out.println("isbn = " + isbn );
    }
}

증가 연산자 ++ (전위) ++a, (후위) a--

감소 연산자 — (전위) ++b, (후위) b--

public class AssignOperTest {
    public static void main(String[] args) {
        int a=1;
        a++;
        ++a;
        a=a+1;
        a+=1;
        System.out.println("a = " + a);

        int b=1;
        b++;
        ++b;
        b=b+1;
        b+=1;
        System.out.println("b = " + b);
    }
}

연산자 연습

public class ArithmeticOperTest {
    public static void main(String[] args) {
        int digit=3625;
        System.out.println(digit%10);
        System.out.println(digit/10%10);
        System.out.println(digit/100%10);
        System.out.println(digit/1000%10);
        int num = 2579;
        int su=5;
        if(su%2==0) {
            System.out.println("짝수입니다.");
        }else{
                System.out.println("홀수입니다.");
            }
        }
    }

논리 연산 연습

public class RelationalOperTest {
    public static void main(String[] args) {
        int a=4;
        System.out.println(a>5);
        System.out.println(a<5);
        System.out.println(a==6);
        System.out.println(a!=4);
        System.out.println(3>=a);
        System.out.println(a<=a+1);
    }
}
public class LogicalOperTest {
    public static void main(String[] args) {
        int x=1, y=0;
        System.out.println(!(x>0));
        System.out.println(x>0 && x<3);
        System.out.println(x>0 && y<0);
        System.out.println(x<0 || y>=0);
        System.out.println(y<0 && y<-5);

        int a=3, b=5;
        System.out.println((a>=3) && (b<6));
        System.out.println((a!=3) && (a>2));
        System.out.println((a!=3) || (a>2));
        System.out.println((b!=5) || (a==1));
    }
}

조건문 연습

import java.util.Scanner;

public class IfbasicTest {
    public static void main(String[] args) {
        int x=-10;
        if(x>0){
            System.out.println("양수입니다.");
        }
        Scanner scan = new Scanner(System.in);
        System.out.println("정수를 입력하세요.: ");
        int num = scan.nextInt();
        if(num%7==0){
            System.out.println("num = " + num + "은 7의 배수입니다.");
        }
        //나이 입력해서 19이상이면 성인임을 출력
        System.out.println("나이를 입력하세요.: ");
        int age = scan.nextInt();
        if(age>=19){
            System.out.println("성인입니다.");
        }
        System.out.println("종료");
    }
}
import java.util.Scanner;

public class IfElseTest {
    public static void main(String[] args) {
        int x=10;
        if(x>=0){
            System.out.println("0 or 양수입니다.");
        }
        else{
            System.out.println("음수입니다.");
        }
        Scanner scan = new Scanner(System.in);
        System.out.println("정수를 입력하세요.: ");
        int su = scan.nextInt();
        if (su%12==0){
            System.out.println("12의 배수 입니다.");
        }
        else {
            System.out.println("12의 배수가 아닙니다.");
        }
        //년도를 입력받아 윤년인지 아닌지 판별
        //윤년: 4의 배수인 년도 이거나 400의 배수인 년도
        System.out.println("년도를 입력하세요.: ");
        int year = scan.nextInt();
        if((year%4==0 && year%100!=0) || (year%400==0)){
            System.out.println("윤년입니다.");
        }
        else{
            System.out.println("윤년이 아닙니다.");
        }
    }
}
public class IfElseIfTest {
    public static void main(String[] args) {
        int jumsu = 14;
        if(jumsu>0 && jumsu<=100){
            if (jumsu>=90){
                System.out.println("A반");
            }
            else if (jumsu>=85){
                System.out.println("B반");
            }
            else if(jumsu>=80){
                System.out.println("C반");
            }
            else {
                System.out.println("불합격");
            }

        }
        else{
            System.out.println("유효한 점수가 아닙니다.");
        }
    }
}

Switch case문 형태

switch (수식) {

   case 상수1:

           문장1;

           break;

   case 상수2;

           문장1;

           break;

   default:

           문장N;       형태 로 이루어짐
public class SwitchCaseTest {
    public static void main(String[] args) {
        String day="Sunday";
        switch(day){
            case "Sunday":
                System.out.println("야구하기");
                break;
            case "Monday":
                System.out.println("야구하기");
                break;
            case "Tuesday":
            case "Wednesday":
                System.out.println("야구하기");
                break;
            default:
                System.out.println("휴식");
        }
    }
}

반복문(loop) - for, foreach

for문: 반복하는 횟수가 정해진 경우에 주로 사용.

  • 초기식, 조건식, 증감식으로 구성되고 세미콜론으로 구분

  • 초기식은 처음 한 번만 수행

  • 조건식 → 반복할 문장 → 증감식 이 반복 수행 됨.

for(초기식; 조건식; 증감식) { } 형태

foreach문(향상된 for문): for( 변수 : 컬렉션 ) { } 형태

public class ForLoopTest {
    public static void main(String[] args) {
        for(int i=1;i<=10;i++){
            System.out.println(i);
        }
        for(char c='A'; c<='Z';c++){
            System.out.println(c+":"+(int)c);
        }
        for(char c='a'; c<='z';c++){
            System.out.println(c+":"+(int)c);
        }
        for(char i=65; i<=90;i++){
            System.out.println((char)i+":"+i);
        }

        int[] numbers = {1,2,3,4,5,6,7,8,9,10};
        for(int i=0; i<numbers.length;i++){
            System.out.println(numbers[i]);
        }
        for(int su : numbers){
            System.out.println(su);
        }
    }
}

반복문(loop) while

while문: 먼저 조건식 검사 반복문 실행

while(조건식){

 반복할 문장;

 증감식;

} 형태로 이루어짐

public class WhileLoopTest {
    public static void main(String[] args) {
        int i=0;
        while(i<=5){
            System.out.println(i);
            i++;
        }
        int[] numbers = {1,2,3,4,5,6,7,8,9,10};
        i=0;
        while (i<numbers.length){
            System.out.println(numbers[i]);
            i++;
        }
        System.out.println(i);
        i=1;
        do{
            System.out.println(i);
            i++;
        }
        while(i<=5);
    }
}

반복문(loop) 이중 for

이중 for문: 반복문 안에 또다른 반복문이 오는 경우

for(){

for(){

}

}

public class LoopLoopTest {
    public static void main(String[] args) {
        int index=1;
        for (int i=0; i<5;i++){
            for(int j=0; j<5;j++){
                System.out.println(index);
                index++;
            }
        }
        int[][] a={
                {1,2,3,4,5},
                {5,4,3,2,1}
        };
        for(int i=0; i<a.length;i++){
            for(int j=0; j<a[i].length;j++){
                System.out.println(a[i][j]+"\t");
            }
            System.out.println();
        }
    }
}
public class GuGuDanTest {
    public static void main(String[] args) {
        for (int i=2; i<9;i++){
            System.out.println(i+"단"+"\t\t");
        }
        System.out.println();
            for(int i=1;i<=1;i++){
                for(int j=2; j<9;j++){
                    System.out.println(j+"X"+i+"="+(j*i)+"\t");
                }
            }
            for(int i=2;i<=2;i++) {
                for (int j = 2; j < 9; j++) {
                    System.out.println(j + "X" + i + "=" + (j * i) + "\t");
                }
                System.out.println();
            }
    }
}

제어문: 반복문의 실행 상태를 직접 제어하고자 break, continue문을 사용한다.

break: 현재 사용 중인 반복문을 중단하고 제어를 반복문 바깥으로 이동

continue: 현재 수행 중인 반복문에서 현재 조건 값에 대한 처리를 중단하고 다음 조건 값에 대한 처리 수행

public class BreakContinueTest {
    public static void main(String[] args) {
        char[] c={'s','h','u','t','d','o','w','n'};
        for(int i = 0; i<c.length;i++){
            if(c[i]=='o') break;
            System.out.println(c[i]);
        }
        int count =0;
        for(int i=1;i<=10; i++){
            if (i%3!=0) continue;
            count++;
        }
        System.out.println();
    }
}

메서드

  • 객체가 가지고 있는 동작
  • 반복적인 동일 작업을 메서드를 만들어 사용하면 편리
  • 객체지향프로그램은 객체가 갖고 있는 메서드를 통해 데이터를 서로 주고 받으며 상호작용 함
  • 메서드는 API에서 제공해주는 메서드와 사용자 정의 메서드의 두 종류로 분류
  • 메서드는 정의를 하고 호출을 하여 사용 됨.
  • 메서드의 결과 값은 하나의 형태로 만들어짐.
  • 변수는 데이터를 하나의 형태로 저장
  • 메서드의 이름이 변수 역할을 함
  • 메서드의 이름에 결과 값을 담아서 리턴 함

메서드 정의와 호출

  • 실인수와 가인수의 개수와 타입이 일치해야 호출 됨

접근제한자 리턴타입 메소드명(인수1, 인수2, …) {

수행코드;

return 반환값;

}

리턴타입 → 수행 후 반환 결과 자료형 // 아무 결과도 반환하지 않으면 void 사용

return 메서드를 종료하고 메서드의 결과를 반환

public class MethodMakeTest {
    public static void main(String[] args) {
        int a=3;
        int b=5;
        //add라는 메서드를 호출(call)하여 두수의 합의 결과를 받기
        int result=add(a,b);
        System.out.println("result = " + result);
    }
    //매개변수로 2개의 정수를 받아 합을 구하여 리턴하는 메서드 정의
    public static int add(int a, int b) {  //반환형이 int니까 int ~하기
        int sum = a + b;
        return sum;
    }
}

메소드를 정의하고 호출해서 파라미터 전달하고 수행하고 리턴해서 결과를 다시 main이 받아서 출력하는 형태

매개변수 전달기법: 값 전달, 번지 전달

public class CallByReference {
    public static void main(String[] args) {
        float a = 56.7f;
        float b = 78.9f;

        floatAdd(a, b);
        System.out.println("종료");
    }

    public static void floatAdd(float a, float b) {
        float hap = a + b;
        System.out.println("hap = " + hap);
    }
}
public class CallByReferenceExam {
    public static void main(String[] args) {
        int[] a={1,2,3,4,5};

        int result=addArray(a);
        System.out.println("result = " + result);
    }

    public static int addArray(int[] x) {
        int sum=0;
        for(int i=0;i<x.length;i++){
            sum=sum+x[i];
        }
        return sum;
    }
}

메서드 오버로딩

  • 하나의 클래스 내에서 동일 이름 메서드를 여러 개 사용할 수 있는 객체지향 기법 - 동작이 비슷하기 때문에 메서드 이름을 같게 만들어 사용하면 편리
  • 오버로딩의 전제조건 → 메서드의 시그니처 가 달라야 함. - 매개변수의 개수, 매개변수의 타입

매개변수의 시그니처: 매개변수의 개수, 타입

메서드의 매개변수 전달 기법: Call By Value, Call By Reference ;

정적 바인딩: 컴파일 시점에서 사용될 메서드가 결정 되는 것

ex. public float add_float_float(float a,float b) { }

매서드는 클래스 내에서 독립적으로 만들어야 함(하나의 단위작업을 처리)

public class OverLoadingTest {
    public static void main(String[] args) {
        float v = add(35.6f, 56.7f);
        System.out.println("v = " + v);
        int vv = add(10, 50);
        System.out.println("vv = " + vv);
    }

    public static float add(float a, float b) {
        float sum = a + b;
        return sum;
    }

    public static int add(int a, int b) {
        int sum = a + b;
        return sum;
    }
}
public class ApiOverloading {
    public static void main(String[] args) {
        System.out.println(10);
        System.out.println(10.5f);
        System.out.println('A');
        System.out.println("APPLE");

        int max1 = maxValue(7, 9);
        System.out.println("max1 = " + max1);

        int max2 = maxValue(3, 8);
        System.out.println("max2 = " + max2);
    }

    public static int maxValue(int a, int b) {
        return (a > b) ? a : b;
    }

    public static int minValue(int a, int b) {
        return (a < b) ? a : b;
    }
}

0개의 댓글