14. Java의 라이브러리
라이브러리란?
Library 도서관처럼
자바의 기능들을 모아둔 것이다.
- 컴퓨터에서 자주 사용되는 부분(함수)을 프로그램상에 모아 놓은 것이다.
- 언제든지 자유롭게 이용할 수 있도록 구성해 놓은 jar 파일이다.
자바 소스프로그램 .java
--------- 컴파일 ---------
자바 목적프로그램 .class
.class 파일들을 압축 -> .jar
JAR란?
JAR는 여러개의 자바 클래스 파일과, 클래스들이 이용하는 관련 리소스 및 메타데이터를 하나의 파일로 모아서 자바 플랫폼에 응용 소프트웨어나 라이브러리를 배포하기 위한 소프트웨어 패키지 파일 포맷이다.
JAR 파일은 자바 런타임이 효율적으로 애플리케이션을 배치(디플로이)할 수 있는 수단으로 설계되었다. 자바 애플리케이션을 구성하는 클래스와 관련 리소드들을 단일 파일로 묶어 압축된 형태인 JAR 파일은, 한 차례의 요청으로 애플리케이션 전체를 다운로드할 수 있게 해준다.
JAR 파일은 META-INF/MANIFEST.MF경로에 위치한 매니페스트 파일을 선택적으로 포함할 수 있다. 매니페스트 파일 안에는, 어떻게 JAR 파일을 이용할지를 기술한 엔트리 정보가 적혀있다. 이를테면 클래스패스(자바) 엔트리를 사용하면 해당 JAR 파일과 함께 로드할 다른 JAR 파일들을 지정할 수 있다. java.util.zip 패키지는 JAR 파일을 읽고 쓰는 클래스들을 포함하고 있다.
프로젝트 우클릭 -> export -> java -> Runnable jar file -> 그 다음 프로젝트 고르고 생성
그 다음 CMD로 확인해보면 jar파일이 생성된 것을 확인할 수 있다.
java -jar basicJava.jar 로 내용을 확인해볼 수 있다.
싱글톤이란?
특정 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴
싱글톤 패턴은 특정 클래스에 대해 객체 인스턴스가 하나만 만들어질 수 있도록 해 주는 패턴이다.
즉, 싱글톤 패턴의 핵심은 어떠한 상황에서든 해당 객체의 인스턴스는 하나만 존재해야 한다는 것.
Static이란 키워드도 함께.
package kr.co.singleton1;
class Mountain {
String name; //산이름
int height; //산높이
public Mountain(){}
}//class end
public class Test01_Mountain {
public static void main(String[] args) {
// 일반 클래스
//자료형 레퍼런스변수 = 객체
//객체가 생성 -> 주소값 발생
Mountain one = new Mountain(); //객체
Mountain two = new Mountain(); //객체
//주소값이 서로다름
System.out.println(one.hashCode());
System.out.println(two.hashCode());
//서로 다른 객체이다
System.out.println(one.toString());
System.out.println(two.toString());
Mountain three = two;
System.out.println(three.hashCode()); //two와 해시코드가 같다.
System.out.println(three.toString()); //two와 같다.
}//main end
}//class end
싱글톤 클래스 설계하기
특정 클래스
싱글톤 클래스 설계 1)
package kr.co.singleton1;
//싱글톤 클래스 설계하기
public class Singleton {
//1) 외부에서 생성자 함수를 호출할 수 없다.
//-> 하지만 객체를 단 하나는 생성할 수 있게 해야한다.
private Singleton() {}
//2) private이 걸려 있어도 내부 클래스에서는 생성자 함수 호출이 가능하다.
//-> 클래스에 고정되어 정적 필드로 자기 자신의 객체를 생성하고
//-> 여기에도 private를 붙여서 외부클래스의 접근을 막는다.
private static Singleton single = new Singleton();
//3) 이 객체를 외부에서 접근할 수 있게 메소드를
//-> 만들어줘야한다.
//-> 외부에서 이 객체를 얻는 유일한 방법이다.
static Singleton getSingle(){
return single;
}
}//class end
getter, setter 메소드
main 메소드가 있는 클래스에서 확인해보면
package kr.co.singleton1;
public class Sington_mainTest {
public static void main(String[] args) {
// 싱글톤 클래스 연습
//Singleton obj = new Singleton(); -에러
//생성자함수를 private으로 접근제한 해두었음.
//new 연산자로 객체를 생성할 수 없다.
//static 접근방법 -> 클래스명.static변수
Singleton obj1 = Singleton.getSingle();
System.out.println(obj1);
Singleton obj2 = Singleton.getSingle();
System.out.println(obj2);
if(obj1==obj2){
System.out.println("같은 객체입니다.");
}else {
System.out.println("다른 객체입니다.");
}
}//main end
}//class end
결과값을 확인해보면 같은 객체입니다. 라는 결과가 나온다.
싱글톤 클래스 설계 2)
생성자 함수 만들기 - shift + alt + s + c
오버라이드 - shift + alt + s + v
getter,setter - shift + alt + s + r
LeeSoonShin 클래스
package kr.co.singleton2;
//싱글톤 클래스 설계
public class LeeSoonShin {
private String name;
private int age;
private String address;
//1) 객체를 외부에서 만들 수 없도록
// 생성자함수를 private속성으로 한다.
private LeeSoonShin(){}
public LeeSoonShin(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
//1-1 getter,setter 생성(외부 연결 통로)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public void info(){
System.out.println(name);
System.out.println(age);
System.out.println(address);
}
//2) 내부에서 객체 하나를 만들어서 상수화
// static final
private static final LeeSoonShin lss = new LeeSoonShin("이순신",59,"광화문");
//3) 2)에서 선언된 레퍼런스변수(lss)에 대한
//getter, setter함수 만들기
public static LeeSoonShin getlss(){
return lss;
}
}//class end
테스트
package kr.co.singleton2;
public class Test {
public void disp(){
LeeSoonShin lee = LeeSoonShin.getlss();
System.out.println(lee);
}//main end
}//class end
메인 클래스
package kr.co.singleton2;
public class MainTest {
public static void main(String[] args) {
// 싱글톤 클래스 연습
//싱글톤 클래스는 new연산자로 객체생성할 수 없다.
//LeeSoonShin lss = new LeeSoonShin(); - 에러
LeeSoonShin lss = LeeSoonShin.getlss();
lss.info(); //이게 먼데용
System.out.println(lss);
Test test = new Test();
test.disp(); //같은 메모리 주소가 나온다. 공유와 continue
}//main end
}//class end
'Backend' 카테고리의 다른 글
06월 17일 월 | SW활용 01 - 운영체제(OS)와 쓰레드, 네트워크 (0) | 2019.06.17 |
---|---|
06월 13일 목 | OOP 19 - DOS 명령어 만들기 (0) | 2019.06.13 |
06월 11일 화 | OOP 17 - JAVA의 데이터 입출력과 Stream (0) | 2019.06.11 |
06월 10일 월 | OOP 16 - JAVA Collection Framework과 Generic (0) | 2019.06.10 |
06월 05일 수 | OOP 15 - JAVA의 Abstract클래스와 Interface (0) | 2019.06.05 |
댓글