java
java 수업 정리
JDK,인텔리제이 설치
💨 jdk 설치하기
jdk 설치 이후 자바 환경변수 변경
ctrl+R->sysdm.cpl고급 시스템 변수 실행- 환경변수 추가 JAVA_HOME 로 /jdk 경로를 붙여넣기
- cmd에
javac -version으로 확인

💨 인텔리제이 설치하기
인텔리제이는 바로 설치를 하지 않고 젯브레인 제품군을 관리해주는 툴박스 앱을 통해 다운로드 합니다. 👉 툴박스 설치하기
설치 후, 윈도우즈 오른쪽 아래 윗꺽쇠 버튼을 클릭해 젯브레인 툴박스 앱을 확인합니다. 그 후엔 아래 사진의 도구를 설치합니다.

앱 실행 후 플러그인으로 korean 과 Lombok 을 설치합니다.
customize>All setting
- 에디터> 파일 인코딩 모두 utf-8로 변경
- 애디터> 일반> 자동 가져오기 java에 있는 빈 체크박스 체크
주석 색상 변경
Editor 속 Color Scheme에 Java> comment 를 찾음
- Line comment 에서 inherit 체크 해제 후 Foreground를 D7D052로 바꾼 후 apply
- Block comment 에서 inherit 체크 해제 후 Foreground를 F574AE로 바꾼 후 apply
콘솔 한글 설정
- 에디터> 파일 인코딩에서 전부 UTF-8로 변경, 명확한 ~ 체크박스 체크
- 사용자 지정 VM 옵션 편집… 에서 아래 코드 추가후 저장
-Dfile.encoding=UTF-8 -Dconsole.encoding=UTF-8- 파일> 캐시 무효화 클릭하면 인텔리제이가 재실행 되면서 프로젝트를 초기화함 -> 한글출력 가능 해집니다.
자바 용어 설명
- JVM (Java Virtual Muchine): 자바 가상머신 - 운영체제마다 설치 되는 코드 해석기
- API (Application Program Interface): 프로그램 개발에 필요한 함수목록
- 클래스 라이브러리: 클래스 도서관, ap나 함수,클래스의 모음
자바실습
//는 한 줄 주석문,/* */은 여러줄 주석문sout시에System.out.println();가 출력됨- 문자열 연결시
"문자"+"문자"하면 됨 - 연산자는 왼쪽이나 오른쪽에 문자열이 있으면 문자열 연결 연산자로 동작함
System.out.println("화면" + 10 + 20);의 결과값은화면1020System.out.println(10 + 20 + "화면");의 결과값은30화면
- println 은 문자열 한 줄 출력 + 줄바꿈 , print는 줄바꿈 없음, printf는 형식화된 출력문
- 데이터 타입(기본 자료형 8개)
- 정수형 : int(4), long(8), short(2), byte(1)
- 실수형 : float(4), double(8)
- 논리형 : boolean(1)
- 문자형(내부적으로 숫자형) : char(2)
- 형변환 type casting
- 형변환 공식
- 작은 정수형 -> 큰정수형(문제없음)
- 큰 정수형 -> 작은 정수형(표현범위 벗어나면 값잘림)
- 실수형 -> 정수령(값잘림,소숫점 날라감)
- 정수형 -> 실수형(문제없음)
- 지동 형변환 : 대입(산술)연산자를 통해 자동으로 형변환 됨
- 수동 형변환 : 형변환 연산자(타입)을 통해 형변환 할때
- 형변환 공식
- 연산자 종류 - 이항연산자(산비논대)
- 단항 : ++ – !(논리반전) (타입) ~(비트반전) 우선순위가 가장 높다
- 산술 : + - * / % « » »>(비트단위 이동연산자)
- 비교 : < > <= >= == != instanceof(객체비교연산자)
- 논리 : && or & or ^ (비트단위 논리연산자)
- 삼항 : ? :
- 대입 : = 복합대입(+= -= *= /= %= …) 우선순위가 가장 낮다.
- 비교연산자
- A > B : A가 B보다 큰가? true/false
- A < B : 작은가?
- 논리 연산자
- AND &&: ~이고,~이면서
- OR ㅣㅣ : ~이거나, ~또는, ~중의 하나
- NOT ! l ~아니다
- T && T : T 둘다 참이면 참
- F ㅣㅣ F : F 둘다 거짓이면 거짓
- 상황 연산자 : ? : 물음표 연산자
- 패턴: (조건절) ? A값 : B값
- 대입연산자
- A = B : B값을 A에 덮어쓰기 한다
- 값의 전달 방향이 오른쪽에서 왼쪽
- 단항연산자이므로 연산순서도 오른쪽에서 왼쪽으로
- 복합대입연산자
- A += B : A = A + B
- A -= B : A = A - B
인텔리제이 단축키
- 출력관련 템플릿
- sout : System.out.println();
- soutv: 변수와 함께 출력
- soutm: 현재 메서드 이름 출력
- soutp: 메서드 파라미터 출력
- 객체 생성 및 캐스팅
- psf: public staic final
- psvm: main 메서드
- thr: throw new
- 반복문 관련 템플릿
- fori: 기본 for루프
- itar: 배열을 위한 for 루프
- iter: 향상된 for 루프
- itli: List를 위한 for 루프
- 조건문 관련 템플릿
- ifn: null 체크 조건문
- inn: not null 체크 조건문
Scanner 클래스 함수들
- nextLine() : 문자열을 입력받되 엔터칠 때 까지 (공백포함)
- next() : 문자열의 공백까지만 입력받음
- nextInt() : 문자열을 받아서 정수로 반환해줌
- nextFloat() : 실수로 반환해줌
- nextDouble() : 실수로 반환해줌
조건문 (자바스크립트 문법과 거의 동일)
- 단일 if문
if(조건절-비교,논리 연산자) { true일 때 수행문 } - if else문
if(10>20) System.out.println("10>20"); else System.out.println("10<=20"); - if else if문
int score = 90; if(score == 90){ System.out.println("90"); } else if(score == 80){ System.out.println("80"); } else { System.out.println("그외의 수"); } - 중첩 if문
if(true){ //조건1 if(false){ //조건2 //조건1이고(and) 조건2이다 } else if(true){ //조건3 //조건1이고 조건2는 아니고 조건3이다 } }
조건문 switch문 (자바스크립트와 거의 유사함)
int a = 10;
switch (a){
case 10:
System.out.println("10 입니다");
break;
case 20:
System.out.println("20 입니다");
break;
default:
System.out.println("그외의 경우");
break;
}
반복문
- for , do-while
- 패턴
for( 초기화; 조건; 증감 ) {
실행문;
}
- 무한반복문 만드는 법
for( ; ; ){ }
while(true){ }
배열 Array
- 같은 타입의 데이터를 연속적 공간에 나열해 놓은 데이터구조
- 생성시에 크기가 지정되고 이후에는 변경 불가
- 인덱스는 0부터 부여됨
객체지향 프로그래밍
- 모든 사물을 객체(물건,사물)로 추상화(모델링,설계)하여 프로그래밍 하는 기법
- 속성(변수,필드)과 행동(함수,메서드)로 정의한다.
//클래스 선언
class Car{
//속성(변수)
int price = 1000;
//행동(메소드)
void run(){
System.out.println("차가 달린다"); } }
public class ex19 {
public static void main(String[] args) {
// 클래스이름 객체(인스턴스) 이름 = new 클래스이름();
Car car = new Car();
//멤버변수 접근하려면, 객체이름 뒤에 점.을 찍는다.
System.out.println(car.price);
//멤버함수 접근하려면, 객체이름 뒤에 점.을 찍는다.
car.run();
// System.out.println(car.run()); //void 반환값을 출력하면 x
}
}
static 변수/함수
- static 예약어 : 정적변수(객체)/함수를 지정할 때 사용
- 의미 : 프로그램 구동시에 고정된 메모리 번지에 들어감 (자동 new), 프로그램 종료시까지 변경되지 않음
사용이유
- 시작점(Entery Point)를 지정할 때 사용함
- 중요한 데이터를 안정적으로 저장할 때 주로 사용
- 자주 사용하는 유틸성 클래스에 지정한다. new를 안 해도 클래스 함수 사용 가능
접근제한자
클래스,함수,변수 앞에 위치하여 접근을 제한할 때 사용
접근제한자 설명 public 같은 폴더(패키지)에서, 다른 폴더의 클래스에서 접근가능 protected 같은 플더 + 상속 관계 클래스에서 접근 가능 default 같은 폴더 private 같은 클래스 안에서 접근 가능(캡슐화,은닉) Getter/Setter 함수를 통해서 접근 가능하도록 허용 ex. 은행 잔고를 창구를 통해서만 접근가능하도록
메서드 오버로딩(Overloading)
- 매개변수의 타입과 갯수를 다르게 함으로 함수의 기능을 확장하는것
- 같은이름의 함수를 여러번 사용하기 위함
- ex. println(정수형) => printlnInt println(문자열) => printlnStr
매서드 오버라이딩(Over riding)
- 상속관계에서 자식클래스의 매서드가 부모클래스의 메소드를 재정의 하는것
- 싱글톤(Signleton)
- 프로그램 안에서 유일한 클래스 객체
생성자 함수(Constructor)
- 클래스 객체가 생성될 때(new) 자동으로 호출되는 메서드
- 용도 - 클래스 필드가 초기화 할 때
클래스의 상속
- 부모(상위) 클래스의 유산(자원-함수와 변수)를 자식(하위) 클래스가 물려받은 것
- 사용이유
- 코드 중복을 피할 수 있다
- 계층적인 구조로 코드를 설계할 수 있다
형변환
- 자식클래스의 객체를 부모클래스형으로 변환하는 것을 업캐스팅이라고 합니다. 명시적 형변환 없이 자동으로 이루어집니다.
- 업캐스팅한 객체는 부모 클래스에 선언된 필드와 메서드만 접근할 수 있습니다.
- 형식 :
부모_클래스명 참조_변수 = new 자식_클래스명() - 부모클래스의 객체를 자식 클래스형으로 형변환하는 것을 말합니다. 이때 자식 클래스형을 붙여 명시적으로 형변환해야 합니다.
- 형식 :
(자식_클래스명)참조_변수
super
- 부모 클래스를 참조하는데 사용하는 특별한 키워드 입니다.
- super 키워드는 다음과 같을 때 사용합니다.
- 자식클래스에서 부모클래스의 메서드를 호출할 때
- 자식클래스의 생성자에서 부모클래스의 생성자를 호출할 때 (단, 부모클래스에 명시적 생성자가 있어야함)
- 부모 클래스의 필드 접근할 때
추상 클래스
- 추상 클래스는 일반 클래스의 공통적인 부분을 추출해서 만든 완전하지 않은 클래스로, abstract 키워드를 붙여 선언합니다.
- 추상 클래스는 추상 메서드를 포함 한다. 추상메서드는 선언만하고 구체적 동작을 정의하지 않은 메서드다. 추상클래스를 상속받은 클래스는 반드시 추상 메서드를 오버라이딩해서 동작 구현을 해야한다.
- 추상클래스는 직접 생성할 수 없고 상속받은 자식 클래스에만 생성할 수 있다.
[접근_제한자] abstract class 클래스명 { abstruct 반환형 메서드명(매개변수1,매개변수2,...); }
인터페이스
- 인터페이스는 킄ㄹ래스에 구현할 메서드들이 선언된 집합이다. 앞에
interface키워드를 붙여 선언. - 인터페이스에는 메서드 선언만 있고 구현은 없는 추상 메서드를 포함한다. 메서드 구현은 각 클래스에서 담당.
- 인터페이스는 디폴트 메서드와 정적 메서드를 포함할 수 있다. 디폴트 메서드는 이름 앞에 default 키워드가, 정적 메서드는 static 키워드가 붙는다.
- 둘 다 메서드 동작이 구현되지만, 정적 메서드는 오버라이딩 할 수 없다.
- 인터페이스는 상수를 포함할 수 있으며, 선언하면 자동으로 public,static,final 키워드가 붙는다. 상수에 접근할 때는 인터페이스명을 사용한다.
- 인터페이스는 접근 제한자로 public 과 default만 사용할 수 있다. 인터페이스에 선언한 모든 메서드는 자동으로 public 으로 설정된다.
[접근_제한자] interface 인터페이스명 { 자료형 변수명 = 값; 반환형 메서드명(매개변수1,매개변수2,...) {}; default 반환형 메서드명(매개변수1,매개변수2,...) {}; static 반환형 메서드명(매개변수1,매개변수2,...) {}; } - 구현한 클래스에서는 implements 키워드로 구현할 인터페이스를 명시한다.
class 클래스명 implements 인터페이스명{} class 자식_클래스명 extends 부모_클래스명 implements 인터페이스1,인터페이스2 {}
- 인터페이스는 킄ㄹ래스에 구현할 메서드들이 선언된 집합이다. 앞에
제네릭 (Generic)
- 형에 따른 데이터 전송(타입선언)을 편하게 하기 위해서
- 가변적인 타입의 선언을 위해서 (상속과 상관 없다)