츄르사려고 코딩하는 코집사입니다.
1. 자바(Java)언어의 특징
- 자바는 객체지향적 언어로 코드 및 객체의 재사용성을 높일 수 있다. 이 의미로 자바는 WORA(Write Once, Run AnyWhere)이라고 할 수 있다.
- 자바에서 WORA(Write Once, Run Anywhere)가 가능한 이유는 자바 바이트 코드를 실행하는 JVM(자바 가상 머신)을 사용하기 때문에 사용가능하다.
- 객체지향적 언어이기 때문에 상속성과 다형성, 캡슐화의 기능을 가진다.
- 자바는 Garbage collector를 사용하여 자동으로 메모리를 관리해줘 메모리 관리에 효율적이다.
- 자바는 플랫폼 독립으로 사용하는 운영체제(OS)나 CPU 등의 사양과 관계없이 실행 가능하다.
- 자바는 멀티스레드를 가지고 있어 수행속도가 빠르다.
2. 값1 instanceof 값2
- 값1이 값2의 데이터 타입이라면 True 반환
3. 자바 삼항연산자
- 자바 삼항연산자는 ? 형태의 삼항연산자를 제공하여 조건 삼항 연산을 할 수 있음
- 즉, 조건문인 if-else문을 축약하여 사용할 수 있는데, 사용하는 형태는 아래와 같다.
- 변수 = 조건 ? 값1 : 값2
- 조건이 참이면 값 1, 조건이 거짓이면 값2를 반환
int c = 0;
if(a>b) c=a;
else c=b;
//삼항연산자
c = ((a>b) ? a:b);
4. 자바의 switch ~ case 문
switch(a){
case 1 : break;
case 2 : break;
case 3 : break;
case 4 : break;
}
5. 자바의 전위/후위연산
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = 10;
int b = ++a;
int c = a++;
System.out.println(b); // 11 출력
System.out.println(c); // 11 출력
}
}
6. 자바(Java)의 import
- 서로 다른 패키지에 있는 클래스를 참조하기 위해 사용한다.
- 한 클래스의 소스 파일에 여러번의 import를 할 수 있다.
- 클래스를 선언하기 이전에 명시를 해야 하고, 패키지 선언 다음에 명시해야 한다.
7. 자동으로 생성되는 코드
- toString() -> println에서 자동으로 toString()을 해준다.
- return;
- super() -> 기본 생성자에서는 super()가 자동으로 들어간다.
- this
- default constructor -> 기본 생성자가 생성되고, 그 안에 super()도 들어간다.
- import java.lang.*;
- upcasting
8. 클래스란?
9. 인스턴스
- 객체가 컴퓨터 메모리에 올가간 것으로 메모리 상의 객체를 말함
10. 구현클래스(Concrete Class)
- 모든 메소드가 구현이 완료된 메소드
11. 추상클래스(Abstract Class)
1) 추상메소드가 존재하는 클래스
- 자식클래스에서 추상메소드를 오버라이딩하여 구현해서 사용
2) 추상메소드가 존재하지 않는 클래스
- 추상클래스는 직접 코드에서 new 연산을 사용하지 못한다.
- 즉, 객체를 생성하지 못한다.
3) 추상클래스에서 객체를 만들 때 추상클래스는 객체를 생성하지 못한다.
4) 그래서, 추상 클래스에서의 객체 크기 비교는 상속 트리에 의해 결정된다.
5)
A : 추상클래스
B : A 상속
C : A 상속
A a = new B();
A a = new C();
는 가능하다.
A a = new A(); 는 불가능하다.
A는 추상클래스이기 때문에 객체를 생성할 수 없다.
12. 비교연산자
1) 비교연산자
- 자바의 비교 연산자는 >, <, >= <=가 있다
- 자바의 비교 연산자는 boolean형을 제외한 기본형에서는 다 사용할 수 있다.
- 참조형에서는 사용할 수 없다.
2) 등가비교 연산자
- ==, !=
- 자바의 기본형과 참조형에서 둘 다 사용할 수 있다.
3) 비트 연산자
- |(OR 연산자)
- &(AND 연산자)
- ^(XOR 연산자)
13. 자바 자료형, 참조형
1) 자료형(기본형)
- 문자, 논리, 정수, 실수가 있다.
- char, boolean, byte, short, int, long, float, double 등
2) 참조형
- 기본형을 제외한 모든 자료형을 말하며, 참조 값(주소)를 가진다.
- 배열, 클래스 등을 말한다.
14. 메소드의 오버라이딩(Override)
- 상속관계이면서 메소드의 기능을 재정의한 것.
15. 메소드의 오버로딩(Overload)
- 메소드의 이름은 같은데 매개변수의 갯수와 유형이 다른 것
16. 오버라이딩과 오버리딩
오버로딩 | 오버라이딩 | |
메소드 이름 | 같음 | 같음 |
매개변수갯수, 타입 | 다름 | 같음 |
리턴타입 | 상관없음 | 같음 |
17. 상속
- 부모클래스의 특징을 받아 자식 클래스를 생성 및 추가하여 코드의 재사용성을 높인 것.
- 공통 속성들은 부모클래스로 올리고, 자식클래스는 부모클래스의 공통속성을 사용하여 추가 속성을 추가하여 사용
- 자바에서는 단일 상속이 원칙
- 다중 상속을 사용하려면 인터페이스를 사용하여 다중 상속 기능 사용
18. 자바의 Modifier
1) public
- 모든 클래스에서 접근 허용
2) protected
- 같은 패키지 폴더의 클래스와 상속관계의 자식 클래스들만 허용
3) default
- 같은 패키지 내의 클래스들만 허용
4) private
- 현재 클래스 내에서만 사용
- 캡슐화 사용할 때 사용
- 캡슐화의 정보 은닉을 위한 방법으로 외부에서는 사용하지 못하게 하고 같은 클래스 내에서만 사용하도록 변수나 메서드 앞에 선언하는 Modifier
19. static 멤버
- static 클래스는 클래스 당 하나만 생성되며 객체를 생성하지 않고 사용 가능하다.
- this 사용 불가
20. 객체
- 클래스를 기반으로 객체화된 것.
- 객체가 생성되면 메모리에 할당이 된다.(즉, Heap 영역에 올라간다)
- 객체 생성 과정은 new 표현식 사용 -> 객체에 대한 참조형 변수 선언 -> 클래스 타입 크기의 메모리 할당과 객체 내의 생성자 코드 실행 -> 객체 멤버 접근
21. 형변환
- 자동형변환 : 작은 타입은 큰 타입으로 자동 변환
- 명시적형변환 : 큰 타입이 작은 타입으로 형변환이 안된다. (int)로 형변환
22. 인터프리터
- 자바는 인터프리터(Interpreter)에 의해 실행
- 소스코드(.java) -> 컴파일(Compile, javac) -> 중간코드(.class, 바이트코드 = 클래스 파일) -> 기계어로 해석 -> 실행
23. 활용 방법 예약어
- final : 자식 클래스를 가질 수 없는 클래스를 의미
- abstract : 객체 생성이 불가능한 추상클래스를 의미
- static : 클래스 변수, 클래스로부터 만들어진 모든 객체가 공유할 수 있는 변수 의미
- transient : Serialize하는 과정에 제외하고 싶은 경우 선언하는 키워드
- volatile : Java 변수를 Main Memory에 저장하겠다라는 것을 명시 멀티쓰레드에서 하나의 쓰레드는 RW를 하고, 다른 쓰레드들이 Read만 할 때 유용
- synchronized : 쓰레드 동기화를 위해 존재
- native : 자바 외 다른 프로그래밍 언어로 구현 되었음을 의미
24. this
- 자바의 객체 생성시에 자동 생성되어 사용되며, 수행되고 있는 객체 자신의 레퍼런스 값을 가지는 것
- 인스턴스에서 자기 자신을 가리키는 키워드이며, 클래스 메소드와 생성자에서 자기 자신의 데이터를 정의하거나 수정하는 기능을 할 수 있음
- 클래스를 기반으로 생선된 인스턴스를 참조한다.
25. static
- 객체를 생성하지 않고 변수나 메서드를 사용하도록 하고자 할 때, 그 변수나 메서드 앞에 선언하는 Modifier
- static은 힙영역이 아닌 static영역에 할당이 된다.
- 그래서, 클래스 안의 변수는 객체를 생성하여 변수를 사용할 수 있지만, static으로 사용할 경우 미리 메모리에 올려놔서 객체 생성없이 변수 사용이 가능하다.
26. 자바(Java) toString()
- Object클래스가 가진 메소드
- toString()은 객체가 가지고 있는 정보나 값들을 문자열로 만들어 리턴하는 메소드
- toString()은 오버라이드를 하고 재정의하여 사용한다.
- toString()은 자동으로 호출된다. 예를 들어, System.out.println()에서는 자료형에 따라 toString()이 자동으로 호출되어 사용된다.
27. 자바(Java) String과 StringBuilder
- 자바에서 문자열을 다루는 대표적인 클래스
- String은 불변의 속성을 가지는데,
String str = new String("hi"); 라고 str 객체를 생성하면 참조변수 str은 hi라는 곳을 가리키고,
str += "Sam"; 을 하게되면 str은 hi Sam을 출력하게 되는데 이는 hi Sam이라는 새로운 영역을 생성하고 참조변수 str은 hi Sam을 가리키게 된다.
그래서, hi만 있는 영역은 가비지 컬렉터(Garbage Collector)에 의해 삭제가 된다.
그래서, str이 수시로 변하게 되면 Heap 영역에 가비지 컬렉터가 많이 생성되어 메모리가 부족하다는 단점을 가지고 있고 이를 해결하기 위해 StringBuilder가 존재한다.
2) StringBuilder
- StringBuilder는 String과는 다르게 가변성을 가진다. 그래서 문자열을 추가하려면 str.append("");를 사용하고, 삭제하려면 .delete() 등의 API를 사용하면 된다.
String은 불변성, StringBuilder는 가변성
28. String 객체와 String 상수풀(String constant pool)
import java.util.Scanner;
import java.util.Arrays;
public class Solution2 {
public static void main(String[] args) {
String str = new String("abc"); //new를 사용하여 Heap메모리 영역에 할당
String str1 = "abc"; //String constant pool 영역에 할당
//==연산은 주소값을 비교하는데 str은 Heap 영역에 str1은 Heap 영역 안에서도 String constant pool 영역에 저장되어 주소가 다름
if(str==str1) System.out.println(true);
else System.out.println(false);
//false 출력
if(str.equals(str1)) System.out.println(true);
else System.out.println(false);
//true 출력
}
}
29. 예외처리 try ~ catch ~ finally
- 예외처리를 하는데 try, catch, finally 를 사용한다.
기본적으로, try ~ catch 문을 사용하는데, try에 에러감지 코드 구문을 넣고, 에러가 발생하면 catch문에서 예외처리를 해준다.
try 구문에는 최소 1가지 이상의 catch문이 필요하다.
finally는 에러가 발생하거나 발생하지 않거나 무조건 실행되어야 하는 부분이다.
30. 사용자 정의 예외 생성 throw
사용자가 try catch문을 사용하지 않고 예외 클래스를 정의하려면 java.lang.Exception 클래스를 상속받아 사용하면 된다.
31. List
- 순서가 있는 데이터의 집합
- 데이터의 중복을 허용한다.
- 특정 위치에 요소를 삽입하거나 수정을 할 수 있다.
32. set
- HashSet, TreeSet 등
- 순서를 유지하지 않는 데이터의 집합
- 데이터의 중복을 허용하지 않는다.
33. Table
- 키 / 밸류의 쌍으로 이루어진 데이터의 집합
- 순서는 유지되지 않고 키는 중복되지 않으며 밸류는 중복이 허용된다.
34. ArrayList
35. final
- 클래스 선언 시 그 클래스를 상속받지 못하게 할 목적으로 클래스 앞에 선언하는 Modifier
36. 동적바인딩
- 런타임 시점에 객체 타입을 기준으로 실행될 함수를 호출하는 것
import java.util.Scanner;
import java.util.Arrays;
import java.util.PriorityQueue;
class a{
void print() {
System.out.println("a");
}
void print(int num) {
System.out.println(num);
}
}
class b extends a{
void print() {
System.out.println("b");
}
}
public class Solution2 {
public static void main(String[] args) {
a a = new a();
a.print();
b b = new b();
b.print(5);
a c = new b();
c.print();
}
}
//
//
// a 5 b 출력
100.
해시함수 = 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수
해시코드 : 더더욱 엄격히 객체가 같은지 검사되어질때 호출되어지는 함수
HashSet은 equals + hashcodes를 통해 객체의 동등여부를 판단
HashSet은 2단계로 검사
eqauls보다 빠름
해시코드가 다를 때만 equals로 다시 판단
리스트 : 순서가 있는 데이터의 모임
리스트는 equals를 통해 객체의 동등여부를 판단.
집합 : 순서가 없는 데이터의 모임(중복이 없다)
101. PriorityQueue 우선순위 큐
- PriorityQueue는 우선순위가 높은애가 먼저 dequeue되는동작
- PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
- 일반적으로 Queue는 FIFO(First-In First-Out)형태를 가짐
-
PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
pq.add(10);
pq.add(3);
pq.add(7);
System.out.println(pq.poll()); // 3 출력
import java.util.Scanner;
import java.util.Arrays;
import java.util.PriorityQueue;
public class Solution2 {
public static void main(String[] args) {
PriorityQueue<Integer> a = new PriorityQueue<Integer>();
a.add(10);
a.add(3);
a.add(5);
a.add(7);
a.add(9);
a.add(11);
a.add(13);
a.add(15);
System.out.println(a);
System.out.println(a.poll());
System.out.println(a.poll());
System.out.println(a.poll());
System.out.println(a.poll());
System.out.println(a.poll());
System.out.println(a.poll());
System.out.println(a.poll());
}
}
// 3,5,7,9,10,11,13,15 출력
compareTo : 객체가 크다작다 비교되어질때 호출되어지는 함수
음수를 리턴하면 내가 작은거고
양수를 리턴하면 내가 큰고
0이면 서로 같은거다.
Exception에는 RuntimeException과 IOException으로 크게 나뉜다.
예외처리를 하는 이유는 잘못된 입력이나 출력에 프로그램이 정상적으로 작동하게 만들기 위해 예외처리.
예외처리를 하는 진짜 중요한 이유는 예외가 발생한 대응을 처리하는 코드를 다른 곳에 옮겨적기 위해 사용
코드를 작성하다가 코드에 문제가 발생했을 때 그 상황을 전달해줄 수 있는 것이 예외처리다.
예외처리를 통해 상황을 전달하는 구조에 대한 이해
예외에는 Runtime과 IO가 있다
RuntimeException에는 ArithException과 NullPointerException이 있다.
Runtime이 왜 Unchecking인지
IO가 왜 Checking인지
try catch 문법에 대해 알고. IOException이 발생할 수 있는 상황에 예외처리를 적용할 수 있다
throw new DuplicatedException();
try{
pm.addProduct(p);
System.out.println("정상등록");
}
catch(DuplicatedException e){
System.out.println("중복된 상품번호");
}
DataOutputStream/ DataInputStream 변수단위로 읽고쓰기
objectStream을 통해 내 객체를 저장하고 읽기 how to
'Language > Java' 카테고리의 다른 글
자바(Java)에서의 재귀함수(Recursive Function) 예제 (0) | 2021.02.07 |
---|---|
자바(Java)에서의 입출력 처리 (0) | 2021.02.07 |
자바(Java) 스택(Stack) 클래스 및 예제 (0) | 2021.02.07 |
자바(Java) Queue 클래스 및 예제 (0) | 2021.02.07 |
자바(Java)로 코딩테스트 할 때 활용할 API (0) | 2021.01.26 |
자바(Java) 상속과 다형성, 오버로드, 오버라이드 (0) | 2021.01.26 |
자바(Java) 재고 관리 프로그램 소스 (0) | 2021.01.22 |
자바(Java) 도서 관리 프로그램 최종 (0) | 2021.01.22 |
최근댓글