티스토리 뷰

it분야의 끄적끄적/Java 계열의 프로젝트 및 글

JAVA 강의 1일차

김수한무거북이WA!두루미 2020. 1. 13. 11:50

<-- -->

객체지향언어(OOP : Object Oriented Programing)의 4대 특징

추상화 추상적 개체 > 구체적 개체 : 추상적 개체의 구체화
캡슐화 데이터의 보호와 은닉, 안정성(데이터를 확인하기 위해서 데이터를 갖고 있는 객체를 통해서 확인해야하며, 데이터가 변경되는 것을 객체가 확인할 수 있음.)
상속 코드의 확장 및 재사용이 용이해짐
다형성 오버라이딩, 동적바인딩 등등..

이를 통해서 얻을 수 있는 장점은 유지보수, 데이터의 은닉이 용이하며 디버깅이 쉽다.

 

 

<-- -->

객체지향언어의 역사

C -> C++ > Win32API -> MFC -> C# : MS 계열

         ㄴ> Java --> web : Jsp -> Spring Framework

                      ㄴ> mobile : Android

         ㄴ> Object C -> Swift : Mac계열

 

 

<-- -->

프로그래머의 스타일에 따라서 3가지로 분류해볼 수 있음.

1. server -> BackEnd

2. client(UI/UX) -> FrontEnd

3. server & client -> FullSteak

 

 

<-- -->

우리가 공부해야할 것

1. languege : Java etc

2. OS : Linux, Unix -> 하지만 Unix는 어렵다고 함.

3. DB : Oracle DB etc

 

 

<-- -->

자바의 탄생 배경

SUN사(현재 Oracle에 인수합병됨)에서 Embedded(소형 프로그래밍)을 목적으로 만들었지만 Embedded로 각광받지 못하였으나 Applet(PC게임 등..)이라는 기능이 각광받으며 특유의 안정성과 보안으로 인해 확장되면서 업계를 잠식함. 

 

 

<-- -->

JVM : Java Virtual Machine

Java는 OS에 독립적이기에 이를 위해서 각각의 OS에 맞는 가상환경을 설정해주는 것이 JVM임.

 

 

<-- -->

환경변수 설정하기

classpath, JAVA_HOME, Path를 설정하려한다.

첨부한 3장의 사진과 같은 순서로 경로를 설정할 수 있으며 Path변수만 편집을 통해서 추가를 한다.

1. classpath : .;

2. JAVA_HOME : Java를 받은 경로에 있는 폴더의 bin폴더를 지정

3. Path : %JAVA_HOME%\bin 추가

 

 

<-- -->

기본문법은 아래와 같으며, 실행단계는 4단계를 거친다.

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

1. 메모장에 위와 같이 적고 클래스명과 동일한 java확장자로 저장을 함.

2. cmd에서 저장된 경로로 디렉토리를 변경함

3. javac 클래스.java : 컴파일함 > 생략가능

4. java 클래스.java : 실행

 

 

<-- -->

접근지정자는 4개가 있다.

private, default, protected, public

접근지정자 접근 범위 동일 클래스 동일 패키지 다른 패키지의 자식 클래스 다른 패키지
private 동일 클래스 내에서만 O      
default 동일 패키지 내에서만 O O    
protected 동일 패키지와 상속 받은 클래스 내부 O O O  
public 접근 제한 없음 O O O O

 

 

<-- -->

Java 언어의 특징

1. OS에 독립적임 : JVM을 통해서 서로 다른 OS에서도 적용가능

2. 객체지향언어 : 추상화, 캡슐화, 상속, 다형성이 잘 적용됨

3. 자동 메모리 관리 : Garbage Colloector가 자동적으로 메모리를 관리해줌

4. 네트워크와 분산처리를 지원 : API를 통해 비교적 단시간에 네트워크와 관련된 프로그램을 개발할 수 있도록 지원

5. 멀티쓰레드 지원 : Java의 멀티쓰레드 프로그램은 시스템과 관계없이 구현가능하며, API가 제공되므로 구현이 쉬움.

6. 동적 로딩을 지원 : 클래스를 따로 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용가능

 

 

<-- -->

상수 : 변하지 않는 값

변수 : 상수를 할당하는 메모리 공간(수학적 의미의 변수와는 다름.)

 

 

<-- -->

변수의 형태 : 기본형, 참조형

1. 기본형 : boolean(논리), char(문자), byte, short, int, long, float, double

  1 byte 2 byte 4 byte 8 byte
논리 boolean      
문자   char    
정수 byte short int long
실수     float double

 

 

자료형 저장 가능한 값의 범위 크기
boolean false, true 8 bit 1 byte
char \u0000 ~ \uffff : 0 ~ (2^16)-1 > 0 ~ 65535 16 bit 2 byte
byte (-2^7) ~ (2^7)-1 8 bit 1
short (-2^15) ~ (2^15)-1 16 bit 2
int (-2^31) ~ (2^31)-1 32 bit 4
long (-2^63) ~ (2^63)-1 64 bit 8
float 1.4e-45 ~ 3.4028235e38 32 bit 4
double 4.9e-324 ~ 1.7976931348623157e308 64 bit 8

 

2. 참조형 : 8개의 기본형을 제외한 나머지 타입이나 객체의 주소를 저장함. (예 : 문자열 변수의 String)

 

 

<-- -->

기본형 변수의 선언

int a;
boolean b;
char c;
double d;
final int e = 5;

a = 3;
b = true;
c = 'q';
d = 5;

이때 final로 선언된 것은 선언과 동시에 변수의 값을 할당한 이유는 final로 선언되면 나중에 변경하는 것이 불가능하기 때문에 변수의 값을 할당하지 않으면 오류가 생긴다.

 

 

<-- -->

참조형 변수의 선언

 

예를 들어서 스캐너 객체를 참조하는 sc라는 변수를 선언하려 한다면 아래와 같이 선언하여 사용하면 된다.

System.in이 의미하는 것은 키보드에서 입력받을 준비가 됐음을 의미함.

import java.util.Scanner;

Scanner sc;

sc = new Scanner(System.in);

아래와 같이 변수의 선언과 동시에 할당을 하는 것 또한 가능하다.

(java.util.* 은 util에 있는 모든 것을 사용하겠다는 것을 의미함.)

import java.util.*;

Scanner sc = new Scanner(System.in);

 

 

<-- -->

naming rule

1. class명의 첫자는 대문자

2. field(변수)는 소문자

3. 합성어를 사용할 때는 합쳐지는 단어의 첫글자는 무조건 대문자

4. 기능에 맞는 이름을 찾음

 

 

<-- -->

import java.lang.*

java.lang 패키지는 자바프로그래밍에 가장 기본이 되는 클래스들을 포함하고 있음.

그렇기 때문에 java.lang 패키지의 클래스들은 import문 없이도 사용할 수 있게 되어 있음.

그동안 String 클래스나 System 클래스를 import문 없이 사용할 수 있었던 이유가 바로 java.lang 패키지에 속한 클래스들이기 때문이었던 것임.

 

 

<-- -->

형변환(casting) : 자동형변환, 강제형변환

 

1. 자동형변환 : 작은 메모리 크기의 데이터 타입을 큰 메모리 크기의 데이터 타입으로 변환하는 것을 의미함.

int a = 200;
double b = a;

 

a : 200

b : 200.0

2. 강제형변환 : 데이터 타입을 원하는 형태로 지정하여 변환하는 것을 의미함.

String a = "20";
int b = Integer.parseInt(a);

 

 

<-- -->

연산은 초기화하는 행위가 발생하지 않는 이상 해당 변수 자체가 바뀌는 일은 없음

a = 3;
a <<1; : 이때 a의 값은 3임

 

b = 3;

b = b<<1; : 이때 b의 값은 6이됨.

 

 

<-- -->

if 조건문 : 조건문이 여러개인 경우에 사용된다.

if (조건식1) {
    (조건식1이 참인 경우에 수행될 문장)
} else if (조건식1) {
    (조건식2이 참인 경우에 수행될 문장)
} else {
    (위의 조건식 중 만족하는 것이 없을 때 수행되는 문장)
}

아래는 조건문을 활용한 단순 사칙연산을 위한 계산기를 만들어보았다.

스캐너를 만들어서 숫자1, 연산자, 숫자2를 받도록 만들었으며 연산자의 경우에 따라서 계산을 달리하게 만들었다.

<-- charAt -->

import java.util.*;

 

class Cal2 {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

 

        System.out.println("숫자1 입력");

        int a = sc.nextInt();

 

        System.out.println("연산자 입력");

        String cc = sc.next();

 

        System.out.println("숫자2 입력");

        int b = sc.nextInt();

 

        double c;

 

 

        char oper = cc.charAt(0);

 

 

        // 연산자 확인

        if (oper == '+') {

            c = a + b;

            System.out.println(c);

        } else if (oper == '-') {

            c = a - b;

            System.out.println(c);

        } else if (oper == '*') {

            c = a*b;

            System.out.println(c);

        } else if (oper == '/') {

            c = a/b;

            System.out.println(c);

        } else {

            System.out.println("not operand");

        }

 

    }

}

 

 

 

 

 

 

 

<-- equals -->

import java.util.*;

 

class Cal {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

 

        System.out.println("숫자1 입력");

        int a = sc.nextInt();

 

        System.out.println("연산자 입력");

        String oper = sc.next();

 

        System.out.println("숫자2 입력");

        int b = sc.nextInt();

        double c;

 

 

        // 연산자 확인

        if (oper.equals("+")) {

            c = a + b;

            System.out.println(a + oper + b +"= "+ c );

        } else if (oper.equals("-")) {

            c = a - b;

            System.out.println(a + oper + b +"= "+ c );

        } else if (oper.equals("*")) {

            c = a * b;

            System.out.println(a + oper + b +"= "+ c );

        } else if (oper.equals("/")) {

            c = a / b;

            System.out.println(a + oper + b +"= "+ c );

        } else {

            System.out.println("not operand");

        }

 

    }

}

 

 

<-- -->

switch 조건문 : switch조건문은 하나의 조건식에 여러개의 결과값이 나올때 주로 사용된다.

switch (조건식) {
    case 값1 :
        (조건식의 결과가 값1과 같은 경우 수행될 문장들)
        break;
    case 값2:
        (조건식의 결과가 값2와 같은 경우 수행될 문장들)
        break;
    default :
        (조건식의 결과와 일치하는 case문이 없을 경우에 수행될 문장들)
}

아래는 위의 if 조건문으로 작성된 계산기를 switch문으로 수정하는 것이다.

스캐너를 만들어서 숫자1, 연산자, 숫자2를 받도록 만들었으며 연산자의 경우에 따라서 계산을 달리하게 만들었다.

<-- 문자열에서 charAt()을 사용하여 연산자를 추출한 후에 연산 -->

import java.util.*;

 

class Cal2 {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

 

        System.out.println("숫자1 입력");

        int a = sc.nextInt();

 

        System.out.println("연산자 입력");

        String cc = sc.next();

 

        System.out.println("숫자2 입력");

        int b = sc.nextInt();

 

        double c;

 

 

        char oper = cc.charAt(0);

 

 

        // 연산자 확인

        switch (oper) {

            case '+':

                c = a + b;

                System.out.println(c);

                break;

            case '-':

                c = a - b;

                System.out.println(c);

                break;

            case '*':

                c = a * b;

                System.out.println(c);

                break;

            case '/':

                c = a / b;

                System.out.println(c);

                break;

            default :

                System.out.println("not operand");

        }

 

    }

}

 

 

 

 

<-- -->

import java.util.*;

 

class Cal {

    public static void main(String[] args)  {

        Scanner sc = new Scanner(System.in);

 

        System.out.println("숫자1 입력");

        int a = sc.nextInt();

 

        System.out.println("연산자 입력");

        String oper = sc.next();

 

        System.out.println("숫자2 입력");

        int b = sc.nextInt();

        double c;

 

 

        // 연산자 확인

        switch (oper) {

            case "+" :

                c = a + b;

                System.out.println(a + oper + b +"= "+ c );

                break;

            case "-" :

                c = a - b;

                System.out.println(a + oper + b +"= "+ c );

                break;

            case "*" :

                c = a * b;

                System.out.println(a + oper + b +"= "+ c );

                break;

            case "/" :

                c = a / b;

                System.out.println(a + oper + b +"= "+ c );

                break;

            default :

                System.out.println("not operand");

        }

 

    }

}

 

 

<-- -->

for 반복문 : 하나의 작업을 반복적으로 수행할 때 사용된다.

for( 초기화; 조건식; 증감식) {
    (조건식이 참일 경우 수행될 문장)
}

아래는 for 반복문을 사용하여 종이를 접은 횟수에 비례하여 늘어나는 사각형의 갯수를 프린트하도록 만든 코드이다.

class For {

    public static void main(String[] args) {

        int j = 0;

        for(int i=1; i<500; i*=2) {

            j += 1;

            System.out.println("접은 횟수 :" + (j-1));

            System.out.println("사각형 갯수 :" + i);

        }

    }

}

 

for 반복문 내부에 for 반복문을 다시 사용할 수 있다. 이를 이중for문이라고 한다.

for( 초기화; 조건식; 증감식) {
    for( 초기화2; 조건식2; 증감식) {
        (조건식이 참일 경우 수행될 문장)
    }
}

아래는 이중for문을 사용하여 구구단을 출력하도록 만든 코드이다.

class For2 {

    public static void main(String[] args) {

 

        for(int i=1; i<=9; i++) {

            for( int j=2; j<=9; j++) {

                System.out.print(j + "*" + i + "="+ i*j + "\t");

            }

            System.out.println("");

        }

 

    }

}

 

 

 

'it분야의 끄적끄적 > Java 계열의 프로젝트 및 글' 카테고리의 다른 글

Java 강의 6일차  (0) 2020.01.20
Java 강의 4~5일차  (0) 2020.01.16
Java 강의 3일차  (0) 2020.01.15
JAVA 강의 2일차  (0) 2020.01.14
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함