Data Scientist 옌

매일 발전하는 IT문제해결사

Programing 프로그래밍/Java 자바

Java 기초 정리

옌炎 2022. 6. 22. 17:19
728x90

* 자바 개발을 위한 도구
1. java
- jdk : java development kit (jdk + jre)
- jdk : 개발 엔진 : 컴파일러
- jre : 실행 엔진 : JVM
2. 편집기
EditPlus, ...
3. 명령어 처리 도구
cmd, 콘솔, MS-DOS
4. API
rt.jar에 있는 자원들

* API 보는 법
- 필드
public static int 필드명 == > int 변수명 = 클래스이름.필드명
- 메소드
public static int 함수이름()
==> int 변수명 = 클래스이름.함수이름();
public int 함수이름()
==> 클래스이름 참조변수 = new 클래스이름();
int 변수명 = 참조변수.함수이름();

* 자바 소스 구성원

1. 예약어 : Keyword

Java Language Keywords
Here is a list of keywords in the Java programming language. You cannot use any of the following as identifiers in your programs. The keywords const and goto are reserved, even though they are not currently used. true, false, and null might seem like keywords, but they are actually literals; you cannot use them as identifiers in your programs.

abstract continue for new switch
assert*** default goto* package synchronized
boolean do if private this
break double implements protected throw
byte else import public throws
case enum**** instanceof return transient
catch extends int short try
char final interface static void
class finally long strictfp** volatile
const* float native super while
*   not used
**   added in 1.2
***   added in 1.4
****   added in 5.0

- package
: 자바 클래스를 모아두는 디렉토리
- class
: 자바 프로그램의 최소 단위
- import
: 바이트코드 가져오기
- Access Modifier 접근제한자
- public
: 다른 패키지에 있는 클래스 및 클래스 자원 사용 가능
- protected
- default(package)
: 실제로는 아무것도 기술하지 않는다.
- private
: 클래스 안에 있는 클래스 자원 사용 가능
- 메모리 관여 키워드
- static
: static 키워드가 붙은 변수는 클래스이름.변수이름으로 호출해서 사용
static 있는 자원(변수, 함수) 호출하는 방법
: 패키지명.클래스이름.자원이름
- new
: static이 붙지 않았지만 메모리에 올리려면
  클래스 이름  참조 변수  = new 클래스 이름();
  Exam_ClassTest ec = new Exam_ClassTest();
  ec.i_val
- extends
: 클래스 단일 상속. 상속해준 클래스를 메모리에 먼저 올림
- implements
: 인터페이스 다중 상속
- this
: 자기 자신 클래스를 가르친다.
** this() 디스 함수, 자기 클래스에서 오버로딩된 생성자를 가리킬 때 (호출할 때) 사용한다.
- final
: 상수. 변경 불가
- interface
: 자식_인터페이스클래스 참조변수 = new 자식클래스();

2. 기호, 문자, 문자상수
{ } ( ) [ ] . "" ;
연산자  + - * / < > = && || != ==

3. 빌트인 리소스
자바에서 만들어놓은 자원
API를 보고 사용
https://docs.oracle.com/javase/8/docs/api/

4. 식별자 identifier
: 개발자가 마음대로 만들어서 사용해야 한다.
- 클래스 이름
- 메소드 이름
- 변수 이름

* 클래스
1. [package 선언]
2. [import 선언]
3. class 블록 선언
4. class 블록 내부 {
[변수]
멤버 변수
클래스 변수
[함수]
}

* 변수와 자료형
- 2진수
- 8진수
- 16진수

* 변수를 공부한다는 것은 자료형을 공부한다는 것
- 변수는 데이터를 담는 상자
- 데이터
- 문자
문자, 문자열
- 숫자
정수, 실수
- 파일
이미지 파일, 문서 파일, 동영상 파일, 음성 파일 등
- 변수의 선언
자료형 선언 변수명 선언 ;
자료형 선언 변수명 선언 = 변수의 값 ;

- 멤버변수 : Fields
: 클래스 블록 안과 함수 블록 외부 사이에 선언하는 변수
- 상수 : Constant Variable
static int i;
- 클래스 변수 : Class variable, Static Variable
public static final int CONST;
- 전역 변수
public int i_var;
- 멤버 변수
int i_var_mem;
- 지역변수
: 함수 블록 안에서 선언하는 함수

* 기초 자료형
정수
Byte  byte  1byte(8bit)
Short  short  2byte(16bit)
Integer  int 4byte(32bit)
Long long 8byte(64bit) 정수l. 정수L
실수
Float float 4byte(32bit) 실수f, 실수F
Double double 8byte(64bit) 실수d, 실수D
문자
- 문자
Character char 2byte(16bit) 초기화 char c = ' '; char ch = '\u0000'; // char 자료형 유니코드로 초기화하기 - String의 초기화 String str0 = ""; 혹은 null; // 
- 논리
Boolean boolean 1byte(8bit)
* 참조 자료형
변수 상자에 주소값을 대입하고 주소값으로 값을 가리킨다.

----------------------> 묵시적 형변환이 일어난다.
  byte - char - short - int - float - double
명시적 형변환을 해야 한다. <----------------------

          인코딩
   문자 char <------------------------> 숫자 2진수, 8진수, 10진수, 16진수 : ASCII (ANSI)
       디코딩


* 함수 (메소드)

[접근제한자] [수정자] 리턴형 함수이름(parameter) {
// 지역변수
데이터타입 변수명 = 값;

[return] 변수명;
}

1. 클래스 블럭 안에서 선언
2. 함수 이름 앞에는 
접근 제한자 키워드를 사용할 수 있다. : public, protected, default, private 
수정자 키워드를 사용할 수 있다. : static, final 
리턴형을 선언할 수 있다. : void(리턴이 없음), 기초 자료형, 참조 자료형, 사용자 정의 클래스 데이터
3. 함수 이름은 영문자 소문자로 시작한다.
4. 함수 이름 뒤에는 () 소괄호를 선언한다.
소괄호 안에는 parameter(매개변수)를 순차적으로 선언할 수 있다.
5. 소괄호 뒤에는 {} 중괄호 블럭을 선언한다.
6. 함수에서 return 키워드를 사용하는 이유
함수에서 선언한 변수는 직접 함수 밖으로 나갈 수가 없다.
7. 함수 블럭 {} 안에서는 인터프리터 interpriter 방식 
(한줄씩 읽어가면서 실행하는 형식)으로 실행 된다.


- parameter 매개변수
: 함수를 선언할 때(함수를 만들 때) 함수 이름 뒤에 소괄호를 선언해서 소괄호에 데이터 타입을 선언하고 변수 명을 선언하는 것
- argument 인수
: 함수를 호출할 때 함수 이름 뒤 소괄호에 선언하는 값 또는 변수

* 배열 : 같은 자료형의 데이터를 순차적으로 나열하는 것
- 자료형 참조변수[] = new 자료형[]{};
배열의 값을 선언과 동시에 초기화하기
int iArr_1[] = new int[]{1, 2, 3};

- 자료형 참조변수[] = {};
배열의 값을 선언과 동시에 초기화하면서 new 연산자와 데이터타입 생략하기
double dArr_2[] = {4.4, 5.5, 6.6};
int iArr_2[] = {4, 5, 6};

배열의 개수 : n
배열의 길이 : n
배열의 인덱스 : n - 1 (0부터 시작)

자료형 참조변수 [] = new 자료형[n];

1차원 배열
자료형 참조변수[] = new 자료형[n];
자료형 참조변수[] = new 자료형[]{};
자료형 참조변수[] = {};
자료형 참조변수[];
참조변수 = new 자료형[]{};

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

* 자원을 메모리에 올리는 방법
1. static 키워드
2. new 키워드
3. 상속
extends
implements
4. 추상 클래스
getInstance
5. Class.forName("클래스이름").newInstance()  

* 제어흐름
- if, switch
if문의 소괄호 안의 표현식(산식)의 결과가 true일 때만 수행

- for, while, do while
- for
for (초기화식; 조건식; 증감식) {true일 때만 실행}
- while
while (조건식) {true일 때만 실행}
- do while
do {무조건 실행} while (true일 때만 실행);
- break

* 연산자
- 논리연산자 boolean 1byte
false true

- 증감 연산자 increment and decrement operators
++x x를 먼저 1 증가시킨 후 그 값을 사용
--x x를 먼저 1 감소시킨 후 그 값을 사용
x++ x값을 먼저 사용한 후 1 증가
x-- x값을 먼저 사용한 후 1 감소

-  삼항 연산자 ternary operator
조건식 ? 결과1 : 결과2;
조건식의 결과가 TRUE이면 결과1, FALSE이면 결과2

-  Short Circuit 현상
단락 회로 평가 Short Circuit Evaluation : SCE
논리 곱(&&) 연산과 논리 합(||) 연산을 할 때 두 항을 모두 살행하지 않더라도
결과 값을 알 수 있는 경우에 나머지 항은 실행되지 않는다.

&&연산 ||연산
T AND T = T T OR T = T
T AND F = F T OR F = T
F AND T = F F OR T = T
F AND F = F F OR F = F

- == 상등 연산자, 등가 연산자는 숫자 연산만 한다.
- 문자열은 java.lang.String.equals(object)

* 숫자 --> 문자
Integer.toString()
String.valueOf()

* 객체 지향 프로그래밍 Object Oriented Programming : OOP
- 자바는 미리 만들어진 프로그램 또는 클래스를 가지고 새로운 프로그램 또는 클래스를 만들 수 있다.
- 자바에서 최고위 빌트인클래스는 java.lang.Object 클래스로, 사용자정의클래스는 빌트인 클래스를 상속하여 만든다.
- 객체 지향에서는 자식이 부모보다 더 부자이며, 자식은 부모의 재산을 다 사용할 수 있다. 단, 부모는 자식의 자원을 사용하기 위해서는 허락을 받아야 한다.

* 생성자
: 생성자는 클래스를 메모리에 올릴 때 자바 버추얼 머신이 사용하는 함수로 자바 소스에 생성자의 코드 블록이 있으면 그 생성자를 사용하고, 자바 소스에 생성자의 코드 블록이 없으면 jvm 생성자를 만들어서 사용한다.

- 생성자는 멤버 클래스 초기화
- 오브젝트 생성 시 한 번만 수행
- 생성자는 오버로딩이 가능
- 생성자 안에서 this, super 키워드와 this(), super() 함수를 사용할 수 있다.
- this : 자기 자신 클래스
- super : 상속 관계에서 부모 클래스에 있는 자원 및 생성자를 호출

new 키워드를 사용
Exam_Const_1 ec = new Exam_Const_1();


// 매개변수가 없는 기본 생성자
클래스이름 () {

}
// 매개변수가 있는 생성자
클래스이름 (매개변수) {

}

* 정보 은닉 (Information Hiding, Encapsulationn)
- 클래스
- default : 동일한 패키지의 클래스 안에서만 인스턴스 생성 가능
- public : 다른 패키지에서 인스턴스 생성 가능
- 메소드
- private : 동일한 클래스 안에서만 접근이 가능하고, this를 사용하는 것들은 외부 접근이 불가능하다. 상속 불가
- default : 동일한 패키지 안에서만 접근 가능
- protected : 동일한 패키지 안에서 사용 가능, 다른 패키지라면 상속 시 사용 가능
- public : 모든 객체에서 접근 가능

private String mid;

: private 접근제한자로 mid 변수에 외부 클래스에서 접근이 불가 => 접근할 수 있도록 getter와 setter 함수를 사용
- 접근을 제한함으로써 유지보수나 확장시 오류의 범위 최소화
- 정보 손상과 오용 방지
- 데이터 변경 시에 다른 객체에 영향을 주지 않음(독립성)

- setter : 세터 메소드 : 세터 함수 : 값을 초기화하는 함수

private String mid 변수를 setter 함수 만들기
1. set
2. 멤버 변수의 변수명에 첫 번째 글자를 대문자로 변경한다. : Mid
3. set + Mid = setMid()
4. public void setMid(String mid) {this.mid = mid;}

- getter : 게터 메소드 : 게터 함수 : 값을 리턴하는 함수

private String mid 변수를 getter 함수 만들기
1. get
2. 멤버변수의 변수명에 첫 번째 글자를 대문자로 변경한다. : Mid
3. get + Mid = getMid()
4. public String getMid() {return this.mid;}

* 상속
extends
extends 키워드로 클래스를 상속하면 상속해준 클래스가 메모리에 먼저 올라간다.

자바 클래스는 single inheritance : 단일 상속 : extends
자바 클래스에서 인터페이스 클래스는 multi inheritance : 다중 상속 : implements

클래스 = 변수 + 함수();

클래스의 종류
일반 클래스 extends 키워드 사용해서 단일 상속
변수 + 블록이 있는 함수() {}
public class 사용자정의클래스이름 {
public String s;
public String aM() {
return "aM() 함수";
}
}
추상 클래스 extends 키워드 사용해서 단일 상속
변수 + 블록이 있는 함수() {} + 블록이 없는 함수();
public abstract class 사용자정의클래스이름 {
public String s;
public String aM() {
return "aM 함수";
}
public abstract String bM(); <-- 추상함수: 함수에 {} 블록이 없는 함수
}
인터페이스 클래스 implements 키워드 사용해서 다중 상속
단 다중 상속은 인터페이스를 클래스에 상속할 때 적용
   인터페이스에서 인터페이스를 상속할 때는 extends 키워드 사용
변수 + 블록이 없는 함수();
public interface 사용자정의인터페이스클래스이름 {
public interface final String S;
public String ss;
public abstract String aM(); <-- 추상함수: 함수에 {} 블록이 없는 함수
public String bM(); <-- 추상함수: 함수에 {} 블록이 없는 함수
}

클래스(자원)을 사용하려고 상속관계에 있는 클래스를 인스턴스했다.
객체지향 프로그래밍에서는 2번을 사용해야 한다.
1. 자식클래스 참조변수 = new 자식클래스();
2. 부모클래스 참조변수 = new 자식클래스();

3, 4번은 사용하지 않는다.
3. 부모클래스 참조변수 = new 부모클래스();
4. 자식클래스 참조변수 = new 부모클래스();


* 메서드 오버라이딩
    - 상위 클래스에 정의한 메서드가 하위 클래스에서 구현할 내용과 맞지 않을 경우 하위 클래스에서 이 메서드를 재정의
    @Override

728x90