자바를 처음 공부할 당시
책이나 온라인 강의는 눈에 잘 안들어와서
블로그에 배우는 내용을 조금씩 정리하다 보니
어느새 내용이 꽤 많아져 버렸다
내가 취직 전부터 취직하고 난 뒤에
공부한 내용들도 정리해 놓은 만큼
똑같이 따라와보면 분명히 취직 대비나
실전에서 막힐 경우에 도움이 될거다
목록은 다음과 같다
자바 초기화 개념정리
초기화는 그냥 변수를 만들었다는 의미다
왜 해야하냐면 변수를 만들지 않으면
거기에 값을 부여할 수가 없으니까 그렇다
필드, 멤버 변수, 전역 변수는 같은 말?
한국은 영어가 표준어가 아니기 때문에
프로그래밍 언어는 영어, 번역한게 뒤섞여 있는데
같은 말도 다르게 부르다 보니 혼동이 오는 경우가 많은데
가급적이면 영어로 외우는 것이 좋다
변수 스코프 개념 정리
스코프란 범위를 의미하는데
선언한 변수를 어디까지 사용할 수 있느냐에 따라
global, local 변수로 나뉘게 된다
객체화(인스턴스화) 개념 및 예제
자바는 객체지향적인 언어이기 때문에
객체화 개념을 반드시 짚고 넘어가야 하는데
대부분의 학교나 학원에서 교육 시
객체화는 붕어빵 틀과 붕어빵같은 개념이다
이런 식으로
비유적으로만 알려주기 때문에 실제 비유만 기억하고
객체화 개념을 망각하게 되는데
객체화는 그냥 객체 타입으로 변수를 선언한 뒤
클래스 내용을 해당 변수에 넣어버리는게 전부다
자바에서 가장 중요한 개념이기 때문에
객체화가 뭔지 모른다면 다음으로 넘어가면 안되고
반드시 이해한 뒤에 다음으로 넘어가야 한다
메소드(Method)
메소드는 기능을 말하는데
객체화한 뒤 그 안에 있는 메소드를 호출해서 사용하게 된다
여기서 호출한 메소드는 반드시
void를 사용해 아무것도 반환하지 않거나 뭔가를 반환해야 한다
메소드를 호출 시 넘기는 값은 파라미터라고 한다
생성자(Constructor)
생성자는 객체 생성 시 처음 수행하는 메소드를 말하는데
만들지 않아도 지장은 없지만
만들어서 뭔가의 기능을 수행하게 할 수 있다
Static 변수, 메소드
static을 사용하면 변수나 메소드를 객체화 없이 사용할 수 있다
따라서 여러 프로그램에서
공통으로 사용하는 경우에 static을 사용하게 된다
배열(Array) 개념 및 예제
배열은 다른 변수들과는 다르게
배열 안에 여러 값을 넣을 수 있는데
int String만 하다가 배열을 보면 뇌에 혼란이 오기 때문에
반드시 잘 짚어두고 넘어가는 것이 좋다
List, Set, Map, Stack, Queue
자바에서는 배열 말고도
List, Set, Map, Stack, Queue 타입의 변수를 선언한 뒤
값을 넣어 사용할 수 있는데
이런 내용들을 모아놓은 것이 자료구조가 되겠다
실제로 배열보다는 List, Set, Map을 더 많이 사용하고
면접시에도 세개의 차이점을 물어보기 때문에
꼭 알아두는 것이 좋다
Stack과 Queue는 비교해보면 엄청 비중이 적어서
개념만 알아두는 정도라면 충분하다
임포트(Import)
타 패키지의 자바 클래스 파일등을 끌어올 때 사용한다
상속(Inheritance)
자바에서는 Extends와 implements를 이용해
타 클래스의 내용을 그대로 가져와서 사용할 수 있는데
이걸 상속이라고 한다
오버라이딩(Overriding)과 오버로딩(Overloading)
실제로는 쓰면서도 뭔지 망각하는 경우가 많지만
면접에서는 자주 물어보는 개념인데
오버라이딩 - 동일한 이름의 메소드를 상속받아도 내 클래스에서 만든 메소드를 사용
오버로딩 - 동일한 이름의 메소드를 받는 파라미터만 다르게 해서 사용
저 두개가 전부이기 때문에 헷갈리면 안된다!!
this, super
각각 동일한 이름의 변수, 메소를 식별 용도로 사용하는데
this는 클래스에서 정의한 변수, 메소드
super는 상속받은 클래스의 변수, 메소드를 말한다
인터페이스(Interface)와 추상(Abstract)클래스
인터페이스는 인터페이스에서 작성한 내용을
인터페이스를 상속받은 클래스에서 반드시 구현해야 하는데
여기서 인터페이스는 정의만 하고
안의 내용은 상속받은 클래스에서 채워 넣어야 한다
즉 인터페이스를 사용하면 상속받은 클래스에서
동일한 이름, 기능을 보장하게 된다
추상클래스는 클래스 앞에 abstract를 넣어 정의하게 되는데
메소드에도 abstract를 붙일 수 있게 된다
해당 클래스를 상속받을 경우
abstract를 붙인 메소드는 반드시
상속받은 클래스에서 구현을 해야 한다
제네릭스(Generics)
제네릭스는 변수에 값을 받을 경우
특정 데이터타입만 받을 수 있도록 정해준다
예외처리(Exception)
에러나 예외가 발생하면 코드 수행이 중단되는데
예외처리를 작성해 주면 예외처리로 빠져서
코드를 계속 수행하게 된다
디버깅(Debugging)
개발하다 막힐 경우에는 하나씩 짚어가며 찾아야 하는데
모든 소스코드에 System.out.println 넣어서 만들면
천문학적인 시간이 걸리기 때문에
반드시 디버그 모드를 사용해야 한다
쓰는 방법은 꽤 간단하다
다형성(Polyporhism)
이름부터 어려워 보이는데
의외로 진짜 간단한거다
다형성을 사용하면 객체화 시
다른 객체를 끌어다 생성한 변수에 넣어줄 수 있는데
철수 a = new 사람()
은 되지만
사람 a = new 철수()
는 안된다
큰 개념의 변수에 작은 개념의 클래스를 넣어
객체화를 할 수는 있지만
반대로는 불가능하다는 얘기인데
이게 전부라 괜히 다른거 찾아서 혼동하면 안된다
멀티쓰레드(Multi Thread)
쓰레드를 사용하면 한번에 여러 동작을 수행할 수 있는데
왜 쓰냐면 한번에 여러개 수행해서 퍼포먼스가 높아지니 쓰는거고
단점은 각 쓰레드별로 수행하다 보니 어떻게 진행되는지 알기 힘들고
컴퓨터에 부하가 늘어난다는 거다
동기화(Synchronized)
여러 쓰레드가 한 메소드 수행 시
한번에 다 들어가서 수행하는 게 아니라
하나씩 들어가서 수행하게 해준다
기타 개념정리
자바 명명규칙
자바에서 클래스, 변수, 메소드 드의 이름을 지을 때
어느 방식으로 작성해야 하는지를 모아놨다
JDK와 JRE의 차이란?
JDK는 개발용 JRE는 실행용인데
JRE만 있어도 이클립스에서 개발이 되는 이유는
이클립스에서 소스 파일 실행에 필요한 javac를 내장하고 있어서 그렇다
java 파일과 class 파일의 차이
java는 소스 파일 class 파일은 실제 사용하는 파일을 말한다
class 파일만 있어도 프로그램이 돌아가기 때문에
java는 내가 갖고 class는 주는 식으로
코드를 안전하게 보관할 수 있게 된다
Primitive Type, Wrapper Class 차이
Primitive Type을 객체화 시킨것을 Wrapper Class라 한다
자바 삼항연산자 사용방법
삼항연산자란 변수 = 조건 ? 조건에 맞을 시 : 아닐 시
이렇게 사용하는데 간단한 조건 확인 용도로 if 대신 쓴다
대소문자 확인방법
isUpperCase를 사용하면 간단하기 확인 가능하다
문자열 비교시 ==가 아닌 equals를 써야하는 이유
이거 취직하고 자바 쓰다보면 곧 알게되는 문제점인데
==와 equals 간에는 차이가 있기 때문에
반드시 문자열 비교 시에는 equals를 써야 한다
에러와 예외의 차이
Error나 Exception이나 딱히 구분을 하려는 사람이 없기 때문에
똑같이 에러 발생했네요 이래도 되는거지만
사실 다르긴 다르다
컬렉션 프레임워크(Collection Framework)
말만 들으면 ??? 밖에 안나오는데
값을 저장하고 관리하는 객체들을 묶어
컬렉션 프레임워크라 하는거고 이게 끝이다
배열 활용방법
순서 뒤집기, 정렬 역정렬, 복사 방법 등..
List, Set, Map 활용방법
순서 바꾸기 및 정렬방법 등..
StringBuffer와 StringBuilder 차이 및 사용법
String 대신 StringBuffer와 Builder를 사용할 수 있는데
용도는 String.concat 혹은 +를 이용해
값 계속 붙이는 현상을 막기 위해 만든 것이지만
실제로는 저런 상황이 많지 않기 때문에
별로 사용할 일은 없다
아마 가장 많이 보게 되는 케이스가
면접에서 물어보는 정도일거다
Random 함수 개념 및 대소문자, 숫자 합쳐 값 출력하기
고유값 만들 때 사용하는 방법이기도 한데
대부분 소문자, 대문자, 숫자만 조합하는 경우가 대부분이지만
이건 대소문자에 숫자까지 합쳐서 랜덤값을 뽑을 수 있다
ArrayList, LinkedList의 차이
ArrayList는 검색용, LinkedList는 삽입 삭제를 자주할때 쓴다
Iterator란?
값을 넣어놓고 뽑을 수 없는 Set 같은 경우나
혹은 여러 변수에서 동일한 방식으로 값을 뽑아올 때
Iterator를 사용하게 된다
쓰레드에서 run(), start()의 차이
run()은 현재 코드 수행을 완료한 후 아래로 내려가지만
start()는 완료하지 않아도 아래로 내려가며 코드를 수행한다
어노테이션 개념 및 예제
일반 주석과는 다르게
컴파일러에서 읽을 수 있는 주석이 어노테이션이 되겠다
|| 로는 split이 되지 않는 이유
특정 값 split 시 ||를 많이 사용하는데
보면 딴건 되는데 저걸로는 안된다
이유는 자바에서 저걸 OR 개념으로 인식하기 때문이라
||로 구분하려면 인식을 못하게 만들어줘야 한다
WAR, JAR 개념 및 Export 방법
프로젝트를 만든 후 남한테 넘겨줄 때
WAR, JAR 형태로 사용하게 되는데
WAR는 웹 프로젝트를 export 한 것
JAR는 자바 프로젝트를 export 한 것을 말한다
소켓 개념 및 소켓을 이용한 단체 채팅 프로그램
이거 은근 많이 하던데
소켓통신이라고 다른 사람이 내 서버에 들어오는 기술이 있는데
소켓통신을 사용한 채팅 프로그램이 되겠다
UUID란?
UUID란 고유 식별자를 말하는데
회원이나 파일 올릴 때 고유값을 주는 용도로 사용하게 된다