JAVA
📌 Java 란?
📌 Java의 특징
- 객체 지향 언어, 이식성이 높다, Open Souse 라이브러리가 풍부
- 📖 객체 지향 언어란 ?
객체(하나하나의 소스) 지향 프로그래밍 -> 남의 소스를 부품처럼 쉽 게 사용하기 위한 프로그래밍
📌 Java의 의의
📌 변수란? 📌
- 데이터를 저장하는 메모리 공간
- 변수를 특정한 공간에 담아둠으로써 데이터의 오염, 훼손, 유실 등을 막음
String wineglass = "와인 한잔"
( 타입 )( 이름 ) = ( 변수 안의 값 )
📌 Scope 영역 📌
- 변수는 선언된 곳 보다 바깥쪽 영역에서는 사용 불가능하다.
📌 Casting 📌
- 보다 큰 타입으로 이동하는 것 = 절차가 필요 X , = 프로모션[묵시적 형변환]
- 보다 작은 타입으로 이동하는 것 = 절차가 필요 O , = [명시적 형변환]
- 다른 종류의 컵으로 이동 = [명시적 형변환]
- 자료형의 최대 밸류 값과 최소 밸류값 찾는법
MAX_VALUE, MIN_VALUE
System.out.println(Byte.MIN_VALUE + "~"+Byte.MAX_VALUE);
Method
📌 Method 란?
- Java에서 method는 코드 블록으로, 특정작업을 수행하는 기능이나 동작을 정의
📌 매소드의 구조
반환타입() 매서드 이름() 매개변수() {
실행문();
반환문()
}
- 📖 method는 구성요소를 꼭 모두 가지고 잇는 것은 아니다.

- 📖 Void 사용 하는 경우는 반환 타입이 없을때
- 📖 용도에 따라 매게변수를 줄 수 있다. 리턴변수 값을 기억
연산자
- 연사자에 붙는 항의 수에 따라 단 항, 이 항, 삼 항 연산자로 분류
📌 단 항 연산자
- 부호에 붙는 피 연산자가 하나인 경우를 단 항 연산자로 함
📌 단 항 연산자 종류
- 부호( +,- ), 증감( ++,-- ), 논리부정( ! ), 비트 반전 ( ~ )
📖
x++; : 증가 나중에 - 카운트에 주로 활용
++y; : 증가 먼저 - 증가한 내용을 이용해 다른 행동을 진행할떄 활용
📌 이 항 연산자
- 부호에 붙는 피 연산자가 두개인 경우를 이 항 연산자로 함
📌 이 항 연산자 종류
📌 이 항 연산자 특징
- 이 항 연산에서는 문자열도 더할 수 있다.
- 첫 값이 문자일 경우 문자로, 숫자일 경우 숫자로 인식 된다.
- 문자가 발견되는 시접점 부터는 더하기(PLUS) 가 아닌 추가(ADD)가 된다.
String str1 = "JDK"+8+0.65;
System.out.println(str1); = "JDK80.65";
String str2 = 8+0.65+"JDK";
System.out.println(str2); = 8.65JDK
String str3 = "8"+0.65+"JDk";
System.out.println(str3); = 80.65JDK
📌
- ( = ) 은 대입 연산으로 사용
- 문자열은 여러 방법으로 선언 가능
String v4 = "JAVA", String V5 = new String("JAVA")
📌 비교 연산
System.out.println(v1 == v2);
System.out.println(v1 != v2);
System.out.println(v1 < v3);
System.out.println(v4 == v5);
System.out.println(v4.equals(v5));

- 📖 문자열 비교는 반드시 equals로 비교하기
📌 And / Or 조건
- AND 와 OR 조건은 선택 영역의 교집합과 합집합을 의미한다.

📌 복합 대입 연산자

📌 삼 항 연산자
- 조건이 true 면 A, false 면 B 값이 대입 된다.

char grade = (score > 90) ? 'A' : (score > 80) ? 'B' : 'C';
📌 %,++,--,!,||,&& 숙지
나머지 %, [두 개 항을 나눈 나머지]
증가 ++,
감소, --,
논리부정 !, [해당 boolean 값을 반전]
동등비교 ==, [A 와 B 가 같은지 검사]
AND ||, [A와 B 둘 다 TRUE인 경우 TRUE]
OR && [A와 B 둘 중 하나만 TRUE 이면 TRUE]
조건문
📌 조건문이란?
- 프로그램의 흐름을 제어하고 특정 조건에 따라 코드 블록을 실행하도록 하는 제어 구조
📌 IF 문 [ 만약에 ]
- 만약에 어떤 상황(조건)이 일어났을 경우(true) 특정 내용을 실행
- IF 안의 조건이 반드시 True 가 되어야 됨
📌 IF ~ else 문
- IF 안의 조건을 만족 시키지 못할 경우 활용
📌 IF, IF ~ else 의 차이점
- IF 단순한 조건을 검사하고 해당 조건이 참일 경우에만 특정 블럭을 실행
- IF ~ else문은 조건이 참과 거짓일떄 각각 다른 블록을 실행
- 📖 IF 문만 사용 할 경우 경계선값 오류가 발생 할 수 있기에
IF - esle 문을 활용
📌 else if
📌 Switch문
📌 Switch문 특징
- 다른 선택 사항으로 활용 할 수 있다.
- 조건을 다루지 않아 한계가 있다. 다만 속도가 빠름
- case 문에서는 특정 case 위치로 이동시켜 주지만 코드블럭 끝까지 실행
그래서 특정 케이스 실행 이후에 Break 을 통해 해당 코드 블럭을 끝내야 한다.
- 📖 코드가 시작하면 마지막까지 프로그래밍 된다.
반복문
📌 반복문이란? 📌
- 단순한 일을 반복할떄 사용
- 자동화를 위해 가장 중요한 조건
- 특정한 조건이 만족되어야 한다.
📌 반복문의 종류
📌 For 문 정의
- 횟수가 정해져 잇는 반복적인 작업을 수행하기 위해 사용되는 제어구조
📌 For 문 실행문

📌 While 문 정의
📌 While 문 실행문
📌 Do while 문 정의
- Do 내용을 먼저 실행한 뒤 while 문의 지속 여부를 체크하는 방식
📌 Do while 문 실행문
- 📖 조건이 부합할 경우 while문과 do while 문은 동일하게 작동
단, 조건이 부합하지 않을 경우 다른 결과를 낸다

📌 Break 문
- 특별한 경우 영역 안의 내용을 모두 실행하지 않고 빠져 나올때 사용
Ex) Swicth 문의 case가 있다.
📌 Continue 문
- 특별한 경우 영역 안의 내용을 무시하고 지나칠 때 사용하는 문
Array 배열
📌 배열이란 📌
- 여러개의 변수를 하나에 담는 기능을 가지고 있다.
- 변수를 일렬로 세워놓고 각 상자에 번호를 붙여 놓은 형태
- 배열은 0번부터 시작 [ 0을 기준으로 삼기 때문 ]
📌 배열의 특징
- 공간이 확보 되어 있어야 하며 선언 시 미리 크기를 지정해야됨
- 배열 선언 시 []가 들어 가야된다 ex) String [] arr = {}
📌 배열 선언 방법
- 선언과 동시에 값을 넣는 방식
- new 연산자로 값을 추가하는 방식
- new 연산자로 바로 선언하는 방법
📌 배열 값 불러오기
- 배열은 기준 변수로부터 얼마나 떨어졌는지가 이름이 된다.
- 값을 넣거나 부를 때 이 이름을 사용
- length 속성은 해당 배열의 길이 값을 가지고 있다.
📌 다차원 배열
- 다차원 배열의 개념을 아파트와 방의 개념으로 생각 해보자
1차원 : royal[1] = ROYAL 아파트 1호
2차원 : royal[1][2] = ROYAL 아파트 1층 2호
3차원 : royal[1][2][0] = ROYAL 아파트 1층 2호 0번 방
📌 향상된 For 문
- 향상된 for문은 코드를 간결하게 작성할 수 있고. 반복문의 오류 가능성을 낮추어주며 개발자의 편의를 증진
- 주로 반복문에서 요소의 인덱스를 다룰 필요가 없는 경우에 사용되며, 코드를 더 간결하고 가독성 있게 만들어 준다.
Class
📌 Class 란?
- 각종 method 와 변수 등을 담는 분류이다.
- Class의 이름은 어떤 변수와 함수의 종류를 대변하는 이름
📌 Package 란?
📌 Class 의 특징
- OOP 4대 특성
- 캡슐화 (Encapsulation)
- 상속 (Inheritance)
- 추상화 (Abstractionism)
- 다형성 (Polymorphism)
📌 Class 선언
- Java의 파일은 최소 1개 이상의 Class 를 가지고 있어야 함
- Class를 만드는데 몇 가지 규칙이 있다. / 첫 글자는 대문자로 하다.
class 는 파스칼 표기법을 사용 한다.
- 모든 단어의 첫 문자가 대문자이고 나머지는 소문자로 표기한다 (Blackcolor)
그 외에는 카멜표기법을 사용 한다.
- 최초의 사용 된 단어외에 의미를 갖는 단어의 첫글자만 대문자로 표기(blackColor)
스네이크 표기법
- 대소문자 구분이 없는 언어에서 주로 사용(black_color)
📌 Class 의 Main Method 란?
- Main Method가 있는 Class는 스스로 동작할 수 있다.
- Main Method가 없는 Class는 누군가를 불러서 사용 해야 된다 [ 스스로 동작 X ]
📌 Class의 객체(instance)화
📌 Exsample sample = new Exsample
- 같은 원본에서 복사해서 가져와도 일련번호가 다르기 때문에 같다고 볼 수 없다.
- 같은 원본에서 복사해도 각각 다른 복사본 이기에...
- 📖 String 끼리 [==] 대조 한다면 일련번호를 대조하기 때문에 다르다고 판단 할 수 있다.
- 📖 이때는 Equals()를 통해 일련번호가 아닌 내용으로 대조 하도록 한다.
📖 라이브러리 ( 도서관 ) : 누군가가 만들어 놓은 수많은 방법론(method) 들을 도서관 처럼 모아 놓은 공간
📌 API (APPlication Programming Interface)
- 응용 프로그렘에서 사용할 수 있도록, 운영체제나 프로그래밍 언어가 제공하는 기능을 제어 할 수 있게 만든 Interface
📌 Interface 란?
- 실제로 하면 복잡한 일을 간단하게 할 수 있도록 만들어 놓은 어떤 장치
Ex) 전구를 켤 떄 전구에 전선을 직접 연결하지 않고 " 스위치 " 사용
📌 Java API
- 어떤 일을 수행 하기 위해 사용하는 도구나 방법(Method) 추가로 사용법도 포함 하고 있다.
📌 Member 구성
- Menber 에는 constuctor(생성자),fild(변수),mrthod(매서드)로 구성되어 있다.
📌 생성자(constructor)는 class를 객체화(instance)해준다.
- 클래스의 이름과 같으며 매서드의 위치를 갖는다.
- ExSample sample = new Exsample(); -> 기본 생성자
📖 생성자는 클래스를 객체화 하면 대체해주는 역할을 갖게 된다.
📖 생성자는 class가 istance(객체화)되면서 가장 먼저 실행된다.
📌 객체화 순서
📌 생성자의 초기화
- 생성자는 객체화 될 때 '초기화'하는 수단으로 활용 된다.
- 초기화는 '0'을 만드는 것이 아니고 최초의 값을 주는 것이다.
Overroad
※ JAVA는 매소드랑 생성자는 여러개 생성 할 수 있도록 허용해줌
- 같은 이름으로 여러개의 생성자를 만드는 것을 'overload'라 한다, 단 매개 변수의 갯수나 형태가 달라야 한다.
public Puppy(String name, String goal) <- OK
public Puppy(String name) <- OK 매개변수 하나만 있으므로 가능
public Puppy(String goal) <- NO 같은 타입의 매개변수가 1개 있음으로 불가능 (위 타입과 생성자 이름 100%일치)
public Puppy() <- OK 기본생성자
📌 Overload 사용 이유
- 이유 : 다양한 객체화를 지원하기 위해서 [ 누군가는 초기화를 하고 싶지 않을수도, 이름만 넣고 싶을 수 있으니]
- 이유 : 다양한 객체화가 되지 않으면 해당 매개변수를 사용하는 매서드를 일일히 찾아야 되기 떄문
📌 Method overload
- method 역시 overload이 가능하다.
📌 Method overload 필요 이유
- 사용자 입장에서는 매개변수를 넣으면 해당 매서드로 자동 연결 -> 오버로드가 없으면 해당 매개변수를 사용하는 매서드를 일일히 찾아야됨
Static
- 원본 영역에 저장되어 존재 -> 객체화 해서 복사가 안된다.
📌 Static 활용법
- 하나의 내용을 공지하거나 원본을 다른 사람이 회손 시키면 안되는 데이터가 있을 시
📌 Final keyword
- final 은 한번 지정 되면 프로그램 종료 시 까지 변경이 불가능 하다 [ 읽기 전용 ]
- final 은 생성자에서만 초기화 가능하다.
📌 Static final == Constant(상수)
- Static final 의 경우 객체화 초기화가 되지 않아 불변의 값으로 간주된다.
- 이러한 필드를 Constant(상수)라고하며 모두 대문자 표기
- 상수는 소스단에서 입력되고 나서 프로그램에서는 절대로 바뀌어서는 안되는 값에 사용
📖 static final 초기화 방법
- static final는 반드시 선언과 동시에 초기화시키거나 정적 블록 내에서 초기화
- 모든 상수는 -> utility로 지칭
📌 접근제한자
- 남들이 사용 가능한 코드도 있지만 내부적으로만 사용할 코드가 있을경우 접근제한자를 사용
[ JAVA 에서는 접근을 허용 하거나 제한 할 수 있기 떄문 ]
Public -> + 전체 사용 가능
protected -> # 사용 제한
default -> ~ 패키지 내 사용 가능
private -> - 클래스 내 사용 가능
📖 private의 외부 사용 방법
- JAVA 에서 제공하는 getter,setter를 사용한다. (Alt + shift + s)
- [ 개발자가 사용자의 실수를 막기 위해 접근 제한자로 접근을 막아 주는 것을 캡슐화라고 함]
캡슐화 (Encapsulation)
- 이렇게 특정 부분의 접근을 제한하는 것을 캡슐화(Encapsulation)이라고 한다
상속 (Inheritance)
- 정의 : 한 클래스가 다른 클래스의 특성과 동작을 그대로 물려받아 사용할 수 있는 기능
- Ex) 나에게 없는 것을 부모에게 물려 받아 원래 내것처럼 사용하는 것
- 넓의 정의 : 일반화
📌 상속을 하는 이유
- code의 중복을 피할 수 없거나, 내 능력으로 만들지 못하는 기술이 있을떄
- Ex) 누군가 만들어 놓은 코드를 부품처럼 쓴다는 개념
📖 단, 공개적(Pubilc)으로 상속해 주겠다는 것만 사용 가능
📖 inheritance(상속) 이 아닌 extends(확장)이라는 키워드를 사용
📌 상속의 개념
- 자바는 다중 상속을 허용하지 않음 -> 자바 클래스 분류의 개념으로 정의에서 어긋남
- Ex) 인간이 조류의 특성과 포유류의 특성을 동시에 상속 받을 수 없는 이유
📌 상속의 특징
- class를 상속 받으면 해당 method를 부모 class 호출 없이 사용 가능
- 나를 객체화시키면 부모를 객체화시키지 않아도 사용 할 수 있다.
- 상속을 받으면 부모의 기능을 내것처럼 쓸 수 있다
객체화로도 남의 기능을 쓸수는 있다.
또한 UML에서는 상속(inherritance)을 일반화(generraliztion) 라고 표현한다.
📌 객체화랑 상속의 차이점
- 객체화 사용 시 각 클래스에 어떠한 매소드가 있는지 일일히 확인 필요
- 상속을 사용 시 한 클래스씩 객체화 하지 않아도 한 클래스에 몰아넣어서 사용 가능
📌 Override
- 정의 : 상속 받은 매서드를 다른 매서드로 바꿔 덮어쓰인다.
📖 전체 또는 일부분만 바꿀 수 있다.
@Override // 전체
public int run() {
return 200;
}
boolean turbo = false;
@Override // 일부분
public int run() { // 상황에 따라서 부모 메서드를 일부 사용
if(turbo) {
return 200;
}else {
return super.run()
// ※ super 는 부모를 의미 super class 는 부모클래스를 의미 = 상위 클래스
📌 Final 붙은 매서드
- Override는 기존 매서드를 수정하는 작업이기에 Final [읽기전용] 붙으면 사용 할 수 없다
다형성 (Polymorphim)
- 개념 : 같은 부모를 상속 받은 class는 같은 Type으로 들어 갈 수 있다.
📌 다형성 필요
- 사용할 객체가 여러개라면 여러개의 객체를 담을 변수르 일일히 선언해야 하기 떄문
📌 다형성의 유용
- 여러 객체가 필요할 때 부모 형태의 변수 하나만 선언하여 사용 할 수 있기에
[ 자원적으로 훨씬 유용하기 때문]
- 단, 자식 객체의 고유 특성이 사라진다는 단점이 있다.
📌 다형성의 형변환
- 묵시적 형 변환 - 자식 클래스가 부모 클래스로 들어가는 것
- 묵시적 형 변환 단점 : 부모 형태로 들어간다는 것은 고유특성이 사라진다.
[ 고유특성을 발현할려면 다시 나가야됨 ]
- 명시적 형 반환 - 부모형태에서 자식 형태로 되돌아 올때 사용
📖 변수와 매개변수의 차이점
- 변수는 데이터를 저장하는 메모리 공간의 이름으로서 어디서든 선언될수 있고, 해당 Scope 내에서 사용 됨
- 매개변수는 매서드나 생성자와 같은 매서드의 파라미터로 사용, 매서드 호출 시 값을 전달 받음, 매서드 내에서만 유효하며 매서드 실행 종료시 소멸
📌 다형성의 활용
-
필드 다형성을 활용하면 객체 변경시에도 필드 타입에 변화를 주지 않아도 된다.
-
부가적인 장점 : 하나의 타입에 여러 객체를 관리할 수 있다는 것은 arrat의 활용이 가능해진다.
-
필드 다형성을 활용하면 객체화 된 속성만 바꿔서 형변환 하면 된다.
📖 변수에 쓰면 필드 다형성
📖 매개변수에 쓰면 매개변수 다형성 : 매개변수를 부모 객체 형태로 하여 들어오는 변수의 폭을 넓힐 수 있다.
OOP 4대 특성
- 캡슐화 - 다른 사용자의 데이터 입/출력을 제한
- 상속 - 한 클래스가 다른 클래스의 특성과 동작을 그대로 물려받아 사용할 수 있는 기능
- 다형성 - 같은 부모를 상속 받은 class는 같은 Type으로 들어 갈 수 있다.
- 추상화 - ?
추상화
- 개념 : 추상은 실체 간에 '공통되는 특성을 추출'히고 불필요한 정보를 제거해 '단순화'시키는 것
📌 추상
📌 추상화의 목적
- 보다 정보를 확실하게 전달하기 위해
- ★ 공통 또는 규격을 정하기 위해 ★
📌 추상화의 키워드
📌 추상클래스의 특징
- 자식 외엔 객체화 할 수 없다.
- 추상 매서드가 있다.
- 추상 클래스를 상속 받으면 추상 매서드를 강제로 override 하게 된다.
📖 추상매서드란?
- "형태만 있고 몸체는 없는" 매서드
- 특정한 매서드를 강제로 override 해야 할 경우 설정
Interface
- 내가 실제로하면 복잡한 일을 간단하게 실행 할 수 있도록 하는 기능
- 추상 매서드를 통해 공통 작업 시 규격을 잡아 주는 역할
- 추상 클래스의 interface는 상속(Extends)이 아닌 구현(implements)라고 불린다.
📌 Interface의 특징
- 복수개의 구현이 가능
- 다형성 활용 가능
- class 의 다형성 : 상속받은 클래스가 부모 클래스 형태로 들어가는것
- interface 의 다형성 : 구현 받은 클래스가 인터페이스 형태로 들어가는 것
- 객체화 불가능
- 규격이 있지만 실체화는 없어 interface를 활용해주는 class가 필요
[ interface는 규격의 개념이기에..]
📌 추상클래스와 인터페이스의 차이점

📌 Interface의 사용
- interface의 구현[inplements] 키워드를 활용하여 다중구현이 가능
- 규격이라는 것은 필요한 만큼 가져다 사용 할 수 있다.
- interface를 통해서도 특정 기능 사용에 대한 규격을 설정 할 수 있다.
📖 Interface의 상속과 class의 상속 차이점 📖
- class는 단일 상속
interface는 다중 상속
- class 다형성은 상속을 통해 구현 부모 클래스 타입으로 자식 클래스의 객체를 다룸
interface는 다형성이 강조된다. 여러 클래스가 동일한 인터페이스를 구현하여 동일한 매서드를 제공
- class는 추상 클래스를 통해 일부 매서드의 구현을 강제한다
interface는 모든 매서드가 추상이므로, interface를 구현하는 class는 모든 매서드를 반드시 구현
📖 class와 다르게 interface는 모듈구조를 갖기 때문에 복수개의 interface를 구현 및 상속이 가능하다.
Interface - 익명 객체 -
- 클래스를 따로 정의하지 않고 익명 객체 내에서 즉석으로 직접 구현
- 단, 익명 객체로 interface를 구현 받은 클래스는 다른 곳에서 불러서 사용 불가
📌 익명 객체 사용 이유
- 익명 객체를 사용하는 경우에는 클래스를 따로 정의하지 않고 익명 객체 내에서 즉석으로 직접 구현이 가능하다는 장점이 있다.
Interface의 결합/응집도
📌 Interface 와 abstract class의 사용이유
- interface 와 추상화는 개발 시 전체적인 규격을 만들어준다.
- 활용하면 모듈 간의 결합도를 감소(느슨하고, 데미지를 적게 입는다)시킨다.
- 응집도는 높을 수록 좋으며, 결합도는 낮을 수록 좋다.
- 결합도가 낮은 것들의 공통점 : 규격이 있어야 한다.
- 결합도가 높으면 안 좋다 : 무언가를 수정 변경 교체시 어려움
- Ex) 결합도가 제일 높은 거는 사람의 신체 부위가 제일 높음
📖 interface를 사용하면 결합도를 낮출 수 있다 / 규격이 있다면 서로 다른 것들끼리 충돌 없이 사용 가능하다
String & Exception
📌 String [ 문자열 ]
- 프로그레밍에서 문자열을 다루는 것은 byte 와 char
- 본래 String(문자열)은 char의 배열(array)을 내장하고 있다. / 정직 데이터 타입이 아님
- 자바에서는 문자열을 다루기 위한 String 이라는 class를 만들게 한다
📌 String의 사용법
- String은 class이기 때문에 여러가지 기능들이 있다
- 문자열의 공백을 없애거나, 다른 문자로 치환 할 수 있따.
- 또한 string이 char[]와 같다는 점에 착안하여 배열 개념을 이용한 기능들도 있다.
StringBuffer 와 StringBuilder
- Strinh 은 용량이 고정되기 때문에 문자열 추가 시 객체를 계속 생성한다
-> 이러한 무분별한 객체의 남발을 방지하기 위해서 사용
📌 StringBuffer