자바의 기본형 데이터 타입 / 참조형 데이터 타입
-논리값(true(참)/false(거짓))을 표현하는 boolean형,
단일문자를 표현하는 char(캐릭터)형,
소수점이 없는 정수를 표현하는 byte(바이트), short(숏), int(인트), long(롱),
소수점이 있는 실수를 표현하는 float(플롯), double(더블)
총 8개의 기본형 데이터 타입이 있습니다.
(32비트 환경에서 char형은 2바이트, byte형은 1바이트, short형은 2바이트, int형은 4바이트, long형은 8바이트, float은 4바이트, 더블은 8바이트)
-참조형 데이터 타입은 객체의 주소를 저장하고 참조하는 타입으로
클래스(Class), 배열(Array), 열거(enum), 인터페이스(interface)
자바와 자바 스크립트의 차이
둘 모두 자바라는 단어가 들어갈 뿐 직접적인 관련은 없음.
자바는 어플리케이션을 개발하기 위한 프로그래밍 언어
자바스크립트는 정적인 HTML 페이지를 브라우저상에서 동적으로 보이도록 하는 웹 클라이언트 사이드 언어
oop
Object-Oriented Programming의 약자로 객체지향프로그래밍 언어를 뜻하며 부품에 해당하는 객체들을 먼저 만들고 이것들을 하나씩 조립, 연결하여 전체 프로그램을 완성하는 기법.
캡슐화
캡슐화는 객체에 대한 관련 데이터들과 행위를 하나로 묶어 외부에 노출되지 않도록 은닉하는 것.
캡슐화를 하면 객체의 사용자로부터 정보 은폐가 가능하며 객체를 포함한 정보의 손상과 오용을 막을 수 있다.
또한 처리된 결과만 사용하므로 객체의 이식성이 좋다.
다형성
다형성이란 동일한 부모 클래스 타입을 상속받은 후손 클래스 타입들을 부모 타입으로 처리하는 기술.
이 다형성을 지원하기 위해서는 동적 바인딩이 필수.
동적 바인딩이란 부모타입으로 참조되는 후손객체의 오버라이딩된 메소드에 적용되며, 컴파일 시에는 부모의 메소드를 정적 바인딩해 두었다가 프로그램이 실행될 때 참조하는 후손의 오버라이딩된 메소드로 연결을 바꾸어 실행하는 것
상속
기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것.
장점 : 코드의 재사용성을 높이고 중복을 제거하여 생산성 향상과 보다 편하게 유지 보수가 가능.
단점 : 굳이 단점이라고 하자면 상속받은 부모클래스를 변형 시 자식 클래스도 동일하게 변형되어 개별적으로 수정이 불가능.
class와 instance
클래스화는 실제로 존재하는 객체들의 공통점을 추상화하는 것이고, 인스턴스화는 추상화된 개념을 실재하도록 하는 것. 클래스를 인스턴스화 한 것을 인스턴스(객체).
thread와 thread를 구현하기 위한 인터페이스, 클래스
쓰레드는 프로세스 내에서 실행되는 세부 작업의 단위
쓰레드를 구현하기 위한 인터페이스는 Runnable 이며, 클래스는 Thread.
static
변수에 static를 적용하면 같은 클래스 타입의 객체들이 공유할 수 있는 클래스 변수가 된다.
static 메소드는 객체에 의존적이지 않은 작업을 수행 할 수 있다. 클래스명을 통한 메소드 호출이 가능
오버라이딩도 되지 않으며 상속받은 클래스에서 사용할 수 없습니다.
+ 클래스가 초기화될 때 수행되고 main()메소드보다 먼저 수행되는 static 초기화 블록으로도 사용할 수 있다.
오버로딩과 오버라이딩
오버로딩은 하나의 클래스 안에서 이름이 같은 메서드를 인자의 타입 혹은 갯수에 따라 다르게 작성하여 동작시키는 것오버라이딩이란 부모 클래스에서 정의한 메서드를 자식클래스에서 새롭게 정의하거나 확장하는 것.
추상클래스와 인터페이스
메소드를 내부 구현 코드를 작성하지 않고 선언부만 작성한 것을 추상 메소드.
이 추상 메소드를 멤버로 가지는 클래스=추상클래스.
인터페이스는 추상 메소드와 상수만을 멤버로 가진다.
제네릭이란
클래스 내부에서 사용할 데이터 타입을 인스턴스가 생성될 때 확정하도록 하는 것.
배열과 ArrayList의 차이
배열이란 같은 타입의 데이터를 연속된 공간에 나열시키고 각 데이터에 인덱스를 부여해 놓은 자료 구조
ArrayList의 경우 배열의 구조를 갖고 있으나, 기본 배열과는 다르게 기존의 인덱스를 부여해놓고 그 인덱스안에 값을 저장 하는 것이 아니라, 입력시킨 값만큼의 인덱스를 생성하여 배열이 되는 구조.
스택과 링크드리스트와 리스트의 차이
List는 자바 컬렉션 프레임워크에서 제공되는 인터페이스중 하나로 데이터의 순서를 지정하는 인덱스와 데이터로 구성되는 자료구조.
ArrayList는 List 인터페이스를 인스턴스화 할 수 있도록 구현한 클래스 중 하나.
Stack은 List인터페이스를 구현한 Vector클래스를 상속받아 구현한 클래스. Stack은 LIFO(선입후출) 알고리즘이 적용된 자료구조.
자바 컬렉션프레임워크의 대표 인터페이스
List | map | set | |
특징 | List 는 순서가 있는 데이터 집합 | map 은 key와 value 값을 한 쌍으로 묶어 데이터 집합을 형성 | set 은 순서가 없는 데이터 집합, 순서를 유지하지 않기 때문에 데이터 처리 속도는 빠르지만, 별도로 목록화하기 위해서는 Iterator 작업이 필요 |
중복값 | 허용 | key는 set의 형태로 중복값을 허용하지 않으며, value는 list의 형태로 값의 중복이 일어날 수 있다. | 허용되지 않음. |
접근제어자의 종류와 특성(private, default, protected, public)
① private : 같은 클래스 내에서만 접근 가능
② default : 같은 패키지 내에서만 접근 가능
③ protected 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근 가능
④ public : 접근 제한이 전혀 없음
hashCode() 값이 모두 같다면?
자바의 hashcode()는 heap에 있는 객체의 메모리 주소를 바탕으로 생성된 값인 hashcode를 반환.
이 hashcode 값이 모두 같으면 모든 객체의 레퍼런스가 같거나 같은 객체인 것으로 간주되어 클래스간의 구분이 불가능
Hashtable과 HashMap 차이점
HashMap과 HashTable은 동일한 내부 구조를 가지고 있지만 HashTable의 경우는 동기화된 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 이 메소드를 실행할 수 없고, 하나의 스레드가 실행을 완료해야만 다른 스레드가 실행이 가능. HashMap 은 Thread Safe 기능이 제외된 메소드를 제공.
객체의 직렬화, 직렬화 대상이 되기 위해 구현해야할 인터페이스
자바 I/O(입출력)에서 객체(Object) 입출력은 기본적으로 바이트단위의 처리만 지원하고 있기 때문에 객체를 스트림 처리하기 위해서 바이트 단위로 변환해야 한다. 이렇게 바이트단위로 변환하는 것을 객체 직렬화라고 한다. 클래스가 직렬화 대상이 되도록 하려면 Serializable 인터페이스를 구현하여야 한다.
자바로 자판기를 설계한다면?
처음 자판기의 버튼 번호와 해당하는 가격을 각각의 객체로 받아 List나 Map으로 만들고,
들어온 금액을 별도의 변수에 담아 버튼 클릭 이벤트가 들어왔을 때, 눌려진 버튼의 정보를 가져와(switch문, if-else 조건문) 해당하는 가격과 입금한 금액의 차를 비교한 후, 0이면 주문 수행하고 끝, 0보다 크면 주문 수행 후 거스름돈 표시, 0보다 작으면 '금액이 적습니다.'하고 에러문구를 LED기판에 찍어주면 된다.
자바스크립트에서 replace에 들어가는 인자 값?
replace("str1", "str2"); = replace의 인자는 2개인데, str1은 바꾸고자 원하는 원래 문자열, str2는 바꿀 문자열.
Garbage Collection(가비지 컬렉션)
① GC란, 프로그램이 사용하지 않는 메모리 영역을 자동으로 수거, 관리해주는 기술.
이를 통해 사용자는 Java로 프로그램을 짤 때, 메모리 관리에 대해 별도 고민이 필요하지 않음.
② Java는 JVM에 의해 리소스가 관리(GC) 되는데, 그 중, 동적 메모리인 Heap을 크게 세 영역으로 나누어 데이터를 저장. Young 영역과 Old 영역, Perm 영역. 이 중 Perm 영역은 실행할 소스코드를 저장하기 때문에 메모리를 함부로 다룰 수 없다. 따라서 앞의 두 영역의 메모리를 관리하는데, 객체의 생성과 삭제시기를 기준으로 즉석 객체면 Young영역, 즉석객체가 아니면 Old 영역으로 나눈다.
GC는 여기서 사용되지 않는 객체가 가지는 메모리를 찾아 비움으로써 시스템 메모리를 관리.
thread와 프로세스의 차이
프로세스는 운영체제로부터 할당 받는 프로그램의 최소 단위이고 하나 이상의 thread를 갖고 있다.
thread는 프로세스 안의 여러 실행의 흐름.
차이점은 프로세스는 Code, Data, Heap, Stack 영역을 공유하지 않고, thread는 Stack 영역을 제외한 메모리 영역을 공유따라서 thread는 프로세스에 비해 자원 소모가 줄고 응답 시간이 단축된다.
하지만 공유하는 메모리 영역에 대해 오류가 생길 수 있으므로 주의를 요하고 디버깅이 어렵고 단일 프로세스에서는 효과를 기대하기 어렵다.
자바의 특징
객체 지향적 프로그래밍 언어, JVM이라는 가상언어 덕분에 어느 플랫폼에서나 동일한 형태로 실행할 수 있다.
따라서 자바로 개발된 프로그램은 CPU나 운영체제의 종류에 관계없이 JVM을 설치할 수 있는 시스템 어디서나 실행할 수 있다.
동적로딩을 지원하여 실행 시에 모든 클래스가 로딩되지 않고 필요한 시점에 클래스를 로딩하여 사용할 수 있다.
프레임워크
확장가능한 기반 코드와 라이브러리를 이용하여 설계를 쉽게 만들어주는 기본 틀.
예)부트스트랩, 스프링
JDK
자바환경에서 돌아가는 프로그램을 개발하는 데 필요한 툴들을 모아놓은 소프트웨어 패키지로 JRE와
java바이트코드 컴파일러, 디버거 등을 포함하는 개발 도구들로 이루어져 있다.
DAO
DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록
만든 오브젝트
Cf)dto(vo): 컨트롤러, 뷰, 비즈니스 계층 등의 계층간 데이터 교환을 위하나 객체
finalize()
자바가상머신이 메모리 누수를 방지하기 위해 실행하는 가비지 컬렉션이 수행될 때 더 이상 사용하지
않는 자원에 대한 정리 작업을 진행하기 위해 호출되는 종료 메소드.
추상클래스
하나 이상의 추상 메소드를 포함하는 클래스. 클래스명 앞에 abstract라는 키워드를 붙인다.
객체화 할 수 없다, 클래스 자체로는 클래스의 역할을 하지 못하고 새로운 클래스를 작성하는데 있어
부모 클래스로서 역할.
인터페이스
상속하는 클래스들은 인터페이스의 메소드들을 반드시 구현해야하기 때문에 동일한 메소드를 만들도록
규약으로 작용할 수 있다.
main메서드가 static인 이유
정적메소드는 객체를 생성하지 않아도 자동으로 실행되는데 메인메소드는 자동으로 실행되어 작업을 수행해야 하기때문에
리플렉션
특정 클래스의 메소드 및 변수 정보를 구해오는 것.
캐시(Cache)와 세션(Session)의 공통점과 차이점
캐시: 웹페이지 요소를 임시 저장, 그림파일이나 문서파일, 웹페이지가 빠르게 렌더링 할 수 있게 도움
쿠키: 웹서버에서 pc로 보내는 작은 파일들을 저장, 보통 특정 웹사이트를 사용자가 접속할 때 발생하여
사용자의 인증을 도와 준다, 만료기간이 있어 시간이 지나면 자동 삭제
Wrapper Class의 사용 이유
Primitive type을 객체화 하여 사용하기 위해. 래퍼클래스로 객체화하게 되면 메소드를 사용할 수 있다.
예를들어 int 3을 래퍼클래스인 Integer로 객체화하면
Integer a=new Integer(3)으로 객체화->a.MIN_VALUE 이런식으로 메소드 사용 가능
변수 명명법이 중요한 이유
협업을할 때 가독성을 좋도록 하기 위해