Java/Basics
-
인터페이스 vs 추상클래스Java/Basics 2019. 6. 20. 10:06
■인터페이스 - 비슷한 기능을 가진 클래스들의 공통점(정확하게는 공통된 메소드)을 추출해서 모아놓은 집합체 또는 규칙 또는 약속 또는 표준 (딱 정의내리기가 애매하다) - 일반 클래스와 비슷한 문법으로 작성한다. 하지만 class A -> interface A 로 쓴다. 그리고 static 변수를 제외한 다른 멤버 변수는 선언할 수 없고 메소드만 등록할 수 있다. - 인터페이스에서 선언 가능한 메소드는 추상 메소드, default 메소드 2가지이다.- 추상메소드는 선언만 해놓고 내부는 구현하지 않는다. 인터페이스를 구현한 클래스에 그 구현을 강제시킨다. - default 메소드는 선언과 내부구현 모두 가능하다. (java 1.8에서 추가)생성하려는 메소드의 특징을 잘 파악해서, 추상메소드로 만들지 def..
-
직렬화 vs 역직렬화Java/Basics 2019. 6. 14. 14:23
■직렬화란? - 객체를 파일로 저장하거나 네트워크를 통하여 다른 곳으로 전송하려면, 객체를 바이트 형태로 일일이 분해해야함. 이 작업을 '직렬화' 라고 한다. - 다시말해, 데이터를 연속적인 데이터로 변형하여 객체를 전송 가능한 형태로 만드는 것이다. - 사용 예 : RMI, BEAN 생성 등 ■Serializable Interface - Serializable 인터페이스를 구현하면, JVM은 해당 클래스가 직렬화의 대상이라는 것을 인지하게 됨. - 타 인터페이스와 달리 구현해야 할 메소드가 없음. 단지 선언만 해두면 끝!! - 생성자, 메소드, 클래스변수를 제외한 '멤버변수'만이 직렬화 대상 - 멤버변수에 transient 제어자를 붙이면 직렬화의 대상에서 제외 - 멤버변수에 Serializable을 ..
-
-
자바 빌드 툴Java/Basics 2019. 5. 21. 09:48
■컴파일이란? - 하나의 소스파일(사람이 다루기 편한 파일)을 바이트 코드 파일(컴퓨터가 다룰 수 있는 파일)로 번역하는 작업 ■빌드란? - 전처리, 전체 소스 컴파일, 링크, 각종 파일 패키징, 테스트, api문서 생성, 배포 등을수행하여 프로젝트가 서비스 가능한 하나의 산출물로 종합하는 작업. ■빌드 자동화 - ant, maven, gradle 등의 빌드 툴이 복잡한 빌드 과정을 도와준다. ■apache ant(Another Neat Tool) - 자바로 구현되어 자바 프로젝트 빌드에 최적화되어 있다. - build.xml라는 빌드 스크립트를 작성하여 빌드를 자동화. - 유연한 스크립트 작성 방식이 때로 비효율적인 경우가 생겼고 라이브러리 의존성의 필요성이 대두되어 maven이라는 새로운 빌드 툴이 ..
-
자바 메모리 구조(Runtime Data Area)Java/Basics 2019. 5. 16. 10:59
■Runtime Data Area Runtime Data Area는 JVM이 프로그램을 수행하기 위해 OS로부터 할당받는 메모리 영역이다. WAS의 성능에 문제가 발생했을 때, 대부분 이 영역들이 원인이 된다. (Memory Leak 혹은 GC) Runtime Data Area는 5가지로 구분된다. PC Register JVM stack Native Method stack Heap Method Area 위 그림에서 볼 수 있다시피, 좌측 3개의 영역은 Thread별로 생성되고 우측 2개의 영역은 모든 Thread가 공유한다.●PC Register (Thread별로 1개씩 존재) Java의 PC Register는 CPU 내의 기억장치인 레지스터와는 다르게 작동한다. (Register-Base가 아닌 Sta..
-
String compareJava/Basics 2019. 4. 9. 09:11
■String- String은 기본형 타입(int,double 등)이 아니라 참조형 타입(class)- String str = new String("Limky");- JVM heap 영역에 할당 - 그러나 특이하게 기본형 타입처럼 값을 직접 할당 해서도 사용 가능- String str = "Limky";- JVM class 영역의 상수풀에 할당 ■String의 내용비교 vs 주소비교- String str01 = "Limky"; String str02 = "Limky";두 변수 모두 '하나'의 String 클래스를 '가리키고' 있다. 내용도 같고 주소도 같다. - String str01 = new String("Limky"); String str02 = "Limky"; 두 변수는 각각 heap과 class..
-
Object classJava/Basics 2019. 4. 6. 20:40
■Object class의 정체- '기본적인' class이다. - 뭔 말이냐면, 모든 클래스가 상속하고있는 기본 Default 클래스이다.클래스들의 단군 할아버지인 것이다. - 모든 클래스는 기본적인 Object 클래스를 암시적으로 상속받고 있다. ■그런데 모든 클래스가 Object를 상속받는 것을 왜 알아야 함?- 추측컨대, 자바의 아부지인 제임스 고슬링은 "모든 클래스가 기본적으로 몇 가지 '특징'들을 가지고 있었으면 좋겠다" 라고 생각했던 것 같다. - 왜냐면 모든 클래스가 필요로 하는 기능이 있었을텐데 이를 모든 클래스가 공통적으로 가지고 있도록 미리 약속할 수 있다면 귀찮게 매번 그 기능을 구현하거나 명세할 필요가 없을 테니 말이다. ■스타크래프트 유닛 예를 통해 필요성 더 알아보기- 예를 들면..