학습 기록/언어 기본

JAVA

서버관리자 페페 2022. 5. 10. 19:28

0.

온라인 환경에서의 JAVA 실행

- JAVA ONLINE EDITOR > JDOODLE

 

1.

WINDOWㄴ 환경에서의 JAVA 설치

- java development kit > "oracle 사 java 설치"

- 내컴퓨터 > 속성 > 고급 환경 설정 > 시스템 환경 변수 편집 > 자바가 깔린 경로 (C:\Program Files\Java\jdk-18.0.1.1\bin) 추가하기

- cmd에서 java -version / javac -version > 정상설치 확인

 

2.

개발환경eclipse 설치

- eclipse foundation > "eclipse ide 내려받기"

- eclipse ide for java developers 

 

3.

eclipse 셋팅

- pakage explorer : 텍스트나 이미지 파일 모아두는 곳

- window > show view > navigtor

- 소스 코드와 컴파일된 것을 한군데 저장

 

4.

프로젝트 셋팅

- navigator : 소스 코드만 보여짐

- package explorer : 컴파일된 class 파일도 보여짐

- class 설정 및 void main > 프로젝트 기본 셋팅

- 해당 괄호 안에 project를 넣는다

 

5.

예외 처리 : "Editor does not conatain a main type"

- src 파일과 bin 파일을 나눠서 저장하는 경우

- src 파일 저장 dir가 달라지면 오류 발생

> properties 설정에서 저장 경로를 동일하게 만들어주거나, src 저장 dir에 src를 넣어줌

 

 

6.

java의 동작 원리

 

7.

hello world 출력  윈도우 application 만들기

원본
실행되지 않음

 

8.

hello world 출력 andorid app 만들기

> android development documentation 검색

- 개발자 도구 다운

 

9.

데이터 타입 : string and number

 

10.

class 바로 생성

> file로 해서 public class ~~ {

public static void main{String[] args) {}

}

가 바로 만들어짐

 

11. 

숫자와 연산

 

 

12.

String과 Character

- 캐릭터는 하나의 문자

- \다음에 오는 것은 일반 문자로 인식

- \n > 줄 띄우기

 

13.

string 대체

 

14.

JAVA의 VARIABLE 선언

- 변수의 형태도 정해줘야 됨

 

15.

변수의 기능

하나의 변경으로 모든 변경 적용 가능

 

16.

CASTING

(데이터 타입을 다른 타입으로 converting)

 

17.

기존 소스코드를 부품으로 IMPORT해서 사용하기

- 단일 디렉토리 내에 있어야 정상 작동

 

18.

ECLIPSE의 DEBUGGER 사용

- 코드 라인 숫자 좌측에 더블클릭 > breakpoint 

- 일반 run 버튼 좌측에 벌레 클릭 > debugger perspective로 전환

- step over로 break point 한줄만 실행하거나 / resume 으로 다음 break point까지만 실행되고 멈추게 됨

- step into를 사용해, 해당 method 패키지로 이동 가능

- step return으로 돌아옴

- treminate로 사용해서 debugging perspective 해제

 

 

19.

입력과 출력

- String을 입력값으로 받아 var로 할당

- String을 입력값으로 받아, double로 cating, var로 할당

 

20.

실행 시, 자동으로 셋팅된 인자 입력하기

- run configurations > arguemts > 작은 따옴표(안되면 큰 따옴표)

- 실행 후 인자를 입력받았던 import javax.swing.JOptionPane; / String id = JOptionPane.showInputDialog();를 지우고

- package preparedarge; 및 String id = args[0]; 로 변수를 받아온다 

 

21

cmd로 직접 컴파일하기

- 소스코드.java 담긴 dir로 이동

- "javac 소스코드.java" 타이핑 > class 파일 생성

- "java 소스코드(.class 붙이지 않음)" > 실행 

 

 

22

컴파일 시, 참조할 lib 경로 설정하기

- javac -cp ".;lib" preparedargs

- javac -cp ".;lib:anoeher: ..

 

23

CMD에서 인자 넣어가면서 실행

 

24

API : 프로그램이 사용하는 화면

UI : 사람이 사용하는 화면

 

25.

API DOCUMENTATION JAVA

- PACKAGE : 비슷한 CLASS들의 모음

- CLASS : VARIABLE과 METHOD의 모음

 

26.

INSTANCE

 

27.

대체

값 선택 > search

 

28

자동 변수 설정하기

값 긁기 > 마우스 오른쪽 > Refactor > Extract Local Variable

ALT + SHIFT + L

 

29

properties 

"ALT + ENTER"

 

30

ARGS를 DOUBLE로 받기

 

주로 ECLIPSE RUN CONFIGURATION에서 ARGUMENT를 넣을 때 사용

 

31

argument를 받는 app은, cmd에서 argument를 뒤에 넣어줘야 작동된다

 

32

변수 설정을 조건문으로 하는 형식

 

33

flow control statement

 

34

double 값을 가진 arrangement 셋팅

> 변수를 하나로 통제할 수 있음

 

35

반복문과 배열의 결합

 

36

Extract Method

- 해당 형식으로 함수 설정됨

 

37

Global / Local

인자를 지워버리면 error 발생

Local : valueOfSupply 변수가 있는데도 받아오지 못하는 이유

 

global로 지정하면 정상 작동

 

변수를 global로 하고, local 내 값 셋팅도 가능

 

38

print(); 만들기

기본
argumenrts 없애기
선언된 method로 대체

 

39.

variable과 method 중복 제거

두개는 상동이므로 제거 가능

 

40.

method를 만들어놓고, void main에서 호출한다

 

41.

OBJECT

- CLASS와 비슷한 개념

- CLASS = VARIABLE + METHOD

 

42

OBJECT CLASS 사용으로 STRUCUTRE 변경

 

- 특정 프로그램에서, 다양한 기능들이 조합될 텐데

- B기능 구현 및 C기능 구현이, A기능 구현의 요소를 참조한다고 하자

 

(A클래스 이름).변수/함수 > 로 사용 가능

43

INSTANCE

특정 CLASS의 VALUE를 다양하게 참조할 필요가 있을떄

CLASS 복제해서 사용하는 것

 

 

44

INSTANCE 복제 형식

 

45

INSTANCE 생성시, STATIC 은 삭제할 것

 

46

메소드에서는 입 출력을 선언해 줘야한다

> public static void main(String[] args) {}

 

47

java에서의 variable 정의

 

48.

java에서의 함수 호출

 

49.

static 함수 호출

 

50.

for 문 사용하기

 

51

자바 소스코드의 구조

02-01 자바 소스코드의 구조

자바 소스코드의 구조에 대해서 알아보자.

자바 소스코드의 구조

보통 일반적인 자바 소스코드는 다음과 같은 형태로 만들어 진다.

클래스명.java

/* 클래스 블록 */
public class 클래스명 {

    /* 메소드 블록 */
    [public|private|protected] [static] (리턴자료형|void) 메소드명1(입력자료형 매개변수, ...) {
        명령문(statement);
        ...
    }

    /* 메소드 블록 */
    [public|private|protected] [static] (리턴자료형|void) 메소드명2(입력자료형 매개변수, ...) {
        명령문(statement);
        ...
    }

    ...
}

소스코드의 가장 바깥쪽 영역은 class 블록이다. 클래스명은 원하는 이름으로 지을 수 있다. 단, 클래스명은 소스파일의 이름(클래스명.java)과 동일하게 사용해야 한다.

※ 참고: public 클래스

그리고 class 블록은 메소드 블록들을 포함한다.

이제 메소드블록을 보자.

메소드 블록 부분에서 [public|private|protected] 라고 되어 있는 부분의 의미는 public, private, protected 또는 아무것도 오지 않을 수 있다는 의미이다. 이 public, private, protected 라는 것은 메소드의 접근제어자를 뜻하는데 이것에 대해서는 뒤에서 자세히 다루고 있다.

※ 참고: 접근제어자

그 다음의 [static] 은 static 키워드가 올수도 있고 오지 않을 수도 있다는 의미이다. static 이라는 키워드가 붙게 되면 static 메소드가 되는데 이것에 대한 내용도 뒤에서 자세히 다루고 있다.

※ 참고: 정적메소드와 변수

그 다음의 (리턴자료형|void) 는 메소드가 실행된 후 리턴되는 값의 자료형을 의미한다. 리턴값이 있을 경우에는 반드시 리턴 자료형을 표기해야 하며 만약 리턴값이 없는 경우라면 void 로 표기해야 한다. 이 항목은 둘 다 생략할 수는 없고 void 또는 리턴자료형이 반드시 있어야만 한다. (그래서 [] 대신 () 표기로 표시하였다.)

메소드명은 원하는 이름으로 지을수 있다. 메소드 명 이후의 괄호() 안의 값들은 메소드의 입력 인자를 뜻한다. 입력 인자의 갯수는 제한이 없으며 입력 인자는 "입력자료형"+"매개변수명" 형태로 이루어 진다.

클래스내에는 이러한 메소드들이 여러개 올 수 있다.

소스코드의 예

다음의 가장 간단한 샘플로 실제 소스코드의 구조에 대해서 자세히 알아보자.

Sample.java

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

클래스 블록

소스코드의 가장 바깥쪽 영역인 클래스 블록을 보자.

public class Sample {
    (... 생략 ...)
}

이 클래스의 클래스명은 Sample이다.

소스코드의 가장 바깥쪽은 클래스(class) 블록이다. 그리고 클래스 블록은 중괄호({})로 둘러싸야 한다.

  • { - 블록의 시작
  • } - 블록의 끝

public은 자바의 접근제어자로 어디서든 이 클래스에 접근할 수 있음을 의미한다. class는 클래스 블록을 만드는 키워드이다.

접근 제어자에 대해서는 뒤에서 자세하게 다룬다.

메소드 블록

클래스 블록 안에는 다음과 같은 메소드 블록이 있다.

public class Sample {
    public static void main(String[] args) {
        (... 생략 ...)
    }
}

이 메소드의 메소드명은 main이다.

메소드 블록 역시 중괄호로 영역을 구분한다. 클래스 블록 안에는 여러개의 메소드 블록이 있을 수 있다. 메소드 블록에 사용된 public, static, void 등에 대해서는 뒤에서 자세히 다루지만 간단히 알아보자.

  • static - 메소드에 static 키워드가 붙을 경우 이 메소드는 클래스 메소드가 되어 객체를 만들지 않아도 "클래스명.메소드명" 형태로 호출이 가능하다.
  • void - 메소드의 리턴타입 중 하나로 void는 리턴값이 없음을 의미한다.
  • String[] args - 메소드의 매개 변수이다. args 변수는 String[] 배열 자료형임을 의미한다. args라는 이름은 인수를 의미하는 arguments의 약어로 관례적인 이름이다. args 대신 다른 이름을 사용해도 상관없다.

명령문 (Statement)

마지막으로 메소드 블록 안에는 명령문(Statement)이 있다.

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

위와 같이 컴퓨터에 무언가 일을 시키는 문장을 명령문(Statement)이라고 한다. 명령문은 반드시 세미콜론(;)을 붙여 문장의 끝을 표시해야 한다. 메소드 블록 안에는 여러개의 명령문이 있을 수 있다.

 

52

BOOLEAN의 사용

 

53

Char의 사용

 

54

String의 사용과 literal 표기

즉, 위의 문자열을 자바에서 표현하려면 다음과 같이 사용해야 한다.

String a = "Happy Java";
String b = "a";
String c = "123";

하지만 위의 예제는 다음과 같이 표현해도 된다.

String a = new String("Happy Java");
String b = new String("a");
String c = new String("123");

new 키워드는 객체를 만들 때 사용한다.

"객체"에 대해서는 나중에 자세하게 알아볼 것이다. 앞으로도 "객체"라는 용어가 계속해서 나올텐데 그때까지는 "새로 생성된 자료형" 정도의 의미라고만 알고 있도록 하자.

하지만 보통 문자열을 표현할 때는 가급적 첫번째 방식(리터럴 표기)을 사용하는 것이 좋다. 첫 번째 처럼 사용하면 가독성에 이점이 있고 컴파일 시 최적화에 도움을 주기 때문이다.

 

리터럴 표기

String a = "happy java"  String a = new String("happy java")는 같은 값을 갖게 되지만 완전히 동일하지는 않다. 첫번째 방식을 리터럴(literal) 표기라고 하는데 객체 생성없이 고정된 값을 그대로 대입하는 방법을 말한다. 위 예에서 리터럴 표기법은 "happy java" 라는 문자열을 intern pool 이라는 곳에 저장하고 다음에 다시 동일한 문자열이 선언될때는 cache 된 문자열을 리턴한다. 두번째 방식은 항상 새로운 String 객체를 만든다.

 

 

54

primitive

이전에 살펴보았던 int, long, double, float, boolean, char 등을 자바는 원시(primitive) 자료형 이라고 부른다. 이런 primitive 자료형은 new 키워드로 그 값을 생성할 수 없다.

primitive 자료형은 다음과 같이 리터럴(literal)로만 값을 세팅할 수 있다.

boolean result = true;
char capitalC = 'C';
int i = 100000;

여기서 잠깐, 하나 기억해 둘 것이 있다. String 은 "Happy Java"와 같이 리터럴로 표기가 가능하지만 primitive 자료형은 아니다. String은 리터럴 표현식을 사용할 수 있도록 자바에서 특별 대우 해 주는 자료형이다.

 

원시 자료형의 Wrapper 클래스

int, long, double, float, boolean, char 등의 원시 자료형은 다음처럼 각각에 대응하는 Wrapper 클래스들이 존재한다.

원시자료형 / Wrapper 클래스

int Integer
long Long
double Double
float Float
boolean Boolean
char Char

앞으로 공부할 ArrayList, HashMap, HashSet 등은 데이터 저장시 원시 자료형 대신 그에 대응하는 Wrapper 클래스들을 사용해야 한다. 원시 자료형 대신 Wrapper 클래스를 사용하면 값 대신 객체를 주고 받을 수 있어 코드를 객체 중심적으로 작성하는데 유리하다. 또한 멀티스레딩 환경에서 동기화를 지원하기 위해서는 Wrapper 클래스가 반드시 필요하다.

 

55

문자열의 리턴과 출력

 

//

 

이후부터 점프 투 자바 회독할 것

'학습 기록 > 언어 기본' 카테고리의 다른 글

while : 회전- 수축 공간  (0) 2022.12.06
for 시행 공간  (0) 2022.12.06
node js  (0) 2022.04.30
Javascript  (0) 2022.02.04
CSS  (0) 2022.01.25