응_비 2023. 5. 8. 09:59

교육 정리 : Java 3일 / SQL 3일(4시간 추가) / 전자정부프레임워크(4시간 추가)(Spring 기반) 4일 진행

5월 10일(수) 11시 ~ 1시 : JAVA Test 진행 // 쓰레드 쪽?

*** Java 시험 (10문항) -> 코드 9문제 / 이론 1문제 (2개 정도만 헷갈리고 나머지는 코드 치면 그대로)

 

기계어 -> ASSEMBLY -> B(Unix) -> C(Unix) --> C++(객체지향 언어) / Linux(clone) -> 플랫폼 종속 최소화 -> Java(JVM) -> JDK-17(Java Development Kit) / JRE -> Java Runtime Environment / SpringFramework

 

JAVA : 안정성과 유지보수를 위해 사용 (가전제품의 기능을 프로그램으로 제공하기 위해 개발)

전자정부프레임워크 : Spring 기반(Java)

 

AdoptOpenJDK 설치 (JAVA)

IntelliJ IDEA Community Edition 개발도구 설치

 

1세대  -->  2세대  --> 3세대 

| 기계어 | 어셈블러 | C, 포트란, 베이직, 코볼 등

 

4세대           -->          5세대

비주얼베이직             자바

델파이                        C++, C#

파워빌더 등                ASP, PHP

                                   Python

 

Laravel 프레임워크 PHP (오픈소스)(워드프레스) -> MOODLE

 

Java (제임스 고슬링 개발) : Java 2 EE (Spring 기반) - 금융권, 공기업, 공공기관 사용

 

[오류 종류]

- 컴파일 시간에 발생하는 구문(Syntax) 오류 : 이클립스에 의해 오류가 자동 표시된다.

- 실행 시 발생하는 실행 시간(Runtime) 오류 : 프로그램 실행 시 JVM에 의해 오류 발생

- 논리적 문제로 발생하는 논리(Logic) 오류 : 프로그래머에 의해 발견되어야 수정 가능

 

[예외처리] - 프로그램 수행 도중 발생할 수 있는 장애에 대한 대처

- NullPointerException : 객체를 생성하지 않고 참조할 경우 해당 객체를 참조할 수 없어서 발생

- IndexOutOfBoundsException : 배열에서 인덱스 범위를 초과했을 때 발생

- NumberFormatException : 문자열을 숫자로 변환할 때, 해당 문자가 숫자 형태가 아니라면 발생한다.

- ClassCastException : 허용되지 않은 타입으로 변환할 때 발생한다.

- IllegalArgumentException : 매개변수가 의도하지 않은 상황을 유발할 때 발생

- ArithmeticException : 산술연산에 오류가 있을 때 발생 (0으로 나눌때 등)

 

< 정수형 >

byte - 1byte : -128 ~ 127
short - 2byte : -32768 ~ 32767 - 거의안씀 but 시중에있는 어플중 호환성문제로 남음

int - 4byte - 0, 5, 9, 2100000000 int - 4byte : -21억 ~ 21억 - 대부분 int를 씀

long - 8byte : -900경 ~ 900경

 

< 실수형 >

float - 4.x byte

double - 8byte : 10.0, 9.5, 2.0, 0.0 <--표준

 

< 문자형 > 

char - 2byte

 

Stay hungry, Stay foolish :: 같은 4byte int와 float의 차이 (tistory.com)

 

같은 4byte int와 float의 차이

int형과 float형은 둘 다 4바이트로 자료형의 크기가 같은데실제로 표현될 수 있는 값은 왜 그렇게 큰 차이가 나는 것일까? int, float 자료형의 bit구조를 알기전까지는 위와 같은 의문을 가진바가 있

smile2x.tistory.com

char : 16비트 

byte : 8비트

short : 16비트

int : 32비트

long : 64비트

 

출력문 : System.out.printf() 문 제공

 

- 이항 논리 연산자 : &&(AND) , ||(OR)

&& : AND (A && B)

|| : OR (A || B)

 

<< : (a << n) - 정수 a를 왼쪽으로 n비트 시프트 (화살표 방향대로 시프트 진행)

>> : (a >> n)  - 정수 a를 오른쪽으로 n비트 시프트

 

- 3항 연산자 : 3개의 피연산자를 가진 3항 연산자 “ ? : ”제공

System.out.println(count != 10 ? "10이 아님" : "10을 가짐");

 

public class Main{
    public static void main(String[] args) {
        int score[] = {88, 97, 53, 62, 92, 68, 82};
        int max = score[0];
        //확장된 for문 -> for(int i=1;i<score.length;i=i+1)
        for (int i : score){
            if(i > max)
                max = i;
        }
        System.out.println("배열 요소의 최대값은" + max + "입니다.");
    }
}

 

 

import java.util.Scanner;

// Press Shift twice to open the Search Everywhere dialog and type `show whitespaces`,
// then press Enter. You can now see whitespace characters in your code.
public class Main{
    public static void main(String[] args) {
        int num[] = {8, 7, 3, 6, 9, 6, 8, 7, 8, 4, 1, 2};
        Scanner stdin = new Scanner(System.in);
        System.out.print("찾고 싶은 숫자 입력 : ");
        int key = stdin.nextInt();
        int count = 0;
        for (int i=0; i < num.length; i++){
            if (num[i] == key){
                count++;
                System.out.println((i + 1) + "번재 데이터와 일치");
            }
        }
        if(count == 0)
            System.out.println(key + "같은 배열에 없습니다.");
        else
            System.out.println(key + "같은 배열에" + count + "없습니다.");
    }
}

배열 활용

public class Main{
    public static void main(String[] args) {
        int num1[] = {10, 20, 30};
        int num2[] = {30, 40, 50};
        num2 = num1;
        num2[2] = 200;
        System.out.print("num1 배열의 값 : ");
        for (int i : num1)
            System.out.print(i + " ");
        System.out.print("\nnum2 배열의 값 : ");
        for (int i : num2)
            System.out.print(i + " ");
        int num3[] = {100, 200, 300};
        int num4[] = {400, 500, 600};
        for (int i = 0; i < num3.length; i++)
            num4[i] = num3[i];
        num4[2] = 999;
        System.out.print("\nnum3 배열의 값 : ");
        for(int i : num3)
            System.out.print(i + " ");
        System.out.print("\nnum4 배열의 값 : ");
        for(int i : num4)
            System.out.print(i + " ");
    }
}

 

 

public class Main{
    public static void main(String[] args) {
        int[] int1 = {9, 1, 7, 3, 5, 4, 6, 2, 8, 0};
        System.out.println("초기배열 : " + Arrays.toString(int1));
        Arrays.fill(int1, 3, 5, 33);
        System.out.println("fill()수행후 : " + Arrays.toString(int1));
        Arrays.sort(int1);
        System.out.println("sort()수행후 : " + Arrays.toString(int1));
    }
}

 

< 객체 특징 >

상속 : 확장의 개념으로, 상위클래스를 그대로 상속하고 추가로 확장되는 개념

캡슐화 : '정보의 은폐' 가능

추상화 : 복잡한 문제들 중에 공통적인 부분을 추출하여 추상 클래스로 제공하고, 상속을 이용하여 나머지 클래스들을 하위 클래스로 제공하는 기법

다형성 : 서로다른 객체가 동일한 메시지에 대하여 서로 다른 방법으로 응답할 수 있는 기능

 

클래스 : 멤버변수, 생성자, 메소드 (3가지 요소)

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

- final : 서브 클래스를 가질 수 없는 클래스 / 종단변수

- abstract(추상) : 객체를 생성할 수 없는 클래스

 

*(기억) 클래스에 붙이는 public 한정자는 main 메소드를 가진 클래스에만 붙여야 합니다.

- final : 종단 변수

- static : 클래스 변수

- abstract : 추상 메소드

- synchronized : 동기화 메소드

 

객체 변수와 지역 변수들은 초기화 과정에서 약간의 차이가 있다

- 객체 변수들은 변수를 초기화하지 않아도, 객체가 생성되면 묵시적 값이 자동으로 설정(사 실은 객체가 생성되면서 묵시적 값으로 초기화를 수행)

int number; <- 객체변수만 선언

double rate;

- 메소드 지역 변수는 변수의 값을 명시적으로 초기화하지 않으면 구문 오류가 발생

- public void aMethod() {

             int count; <- 메소드 내 지역변수 선언

             System.out.println(number);

// Box3.java
public class Box3 {
    int width;
    int hegith;
    int depth;
    long idNum;
    static long boxID = 0;
    
    public Box3(){
        idNum = ++boxID;
    }
}

 

 

// Main.java
public class Main {
    public static void main(String[] args) {
       Box3 mybox1 = new Box3();
       Box3 mybox2 = new Box3();
       Box3 mybox3 = new Box3();
       Box3 mybox4 = new Box3();

       System.out.println("mybox1의 id번호 : " + mybox1.idNum);
       System.out.println("mybox2의 id번호 : " + mybox2.idNum);
       System.out.println("mybox3의 id번호 : " + mybox3.idNum);
       System.out.println("mybox4의 id번호 : " + mybox4.idNum);
       System.out.println("마지막 생성된 박스 번호는" + Box3.boxID + "번 입니다.");
    }
}

생성자 이름은 클래스의 이름과 동일함

class Box4 {
    int width;
    int height;
    int depth;
    public Box4(int w, int h, int d)
        {
       width = w;
       height = h;
       depth = d;
       }
    }
    public class Main {
       public static void main(String[] args) {
          Box4 mybox1 = new Box4(10, 20, 30);
          int vol = mybox1.width * mybox1.height * mybox1.depth;
          System.out.println("박스의 부피 : " + vol);
       }
    }
}

오버로딩(Overloading) : 동일한 메소드가 여러가지 기능 제공

- 생성자 매개 변수의 타입과 개수가 달라야 한다.

오버라이딩(Override)

 

class Box5 {
    int width;
    int height;
    int depth;

    public Box5() {
        width = 1;
        height = 1;
        depth = 1;
    }

    public Box5(int w) {
        width = w;
        height = 1;
        depth = 1;
    }

    public Box5(int w, int h) {
        width = w;
        height = h;
        depth = 1;
    }

    public Box5(int w, int h, int d) {
        width = w;
        height = h;
        depth = d;
    }
}
    public class Box5Test1 {
        public static void main(String args[]) {
            Box5 mybox1 = new Box5();
            int vol = mybox1.width * mybox1.height * mybox1.depth;
            System.out.println("박스의 부피(매개변수없음) : " + vol);

            mybox1 = new Box5(10);
            vol = mybox1.width * mybox1.height * mybox1.depth;
            System.out.println("박스의 부피(매개변수 1개) : " + vol);

            mybox1 = new Box5(10, 20);
            vol = mybox1.width * mybox1.height * mybox1.depth;
            System.out.println("박스의 부피(매개변수 2개) : " + vol);

            mybox1 = new Box5(10, 20, 30);
            vol = mybox1.width * mybox1.height * mybox1.depth;
            System.out.println("박스의 부피(매개변수 3개) : " + vol);
    }
}

 

 

public class Smaple3 {
    void methodA(){
        System.out.println("B 매소드 호출 전");
        methodB();
        System.out.println("B 메소드 호출 후");
    }
    void methodB(){
        System.out.println("B 매소드 호출 전");
        methodC();
        System.out.println("B 메소드 호출 후");
    }

    void methodC(){
        system.out.println("C 매소드 수행 완료");
    }
}