싱글턴의 특징은 특정 클래스의 인스턴스는 오직 하나임을 보장하고, 이 인스턴스에 전역적인 접근성을 제공한다.
싱글턴은 특정 클래스를 전역변수처럼 사용할수 있게하며, 전역변수의 개선책이다. 싱글턴은 전역변수의 여러가지
문제를 해결한다.그러나 반대로 싱글턴은 전역변수가 가지는 문제점 또한 상속하고 있다.
'편리함'을 위해 싱글턴을 쓰다 오히려 로직을 무너뜨릴 수 있으며 이는 특히 멀티쓰레드에서는 디버깅을 난해하게
만드는 요소가 될 수 있다.싱글턴은 내부가 아닌 외부에서 직접 생성에 관련한 기능을 제공한다.
싱글턴 패턴의 경우 인스턴스가 클래스 내부에 선언되어 있고 static 즉 정적 변수보통 클래스의 인스턴스 생성은
생성자에서 하는데 싱글톤의 특성상 유일한 객체를 생성하기에 클래스 내부에 선언을 하여 관리를 용이하다.

은닉화
  : 자바 클래스를 접근하고자 하는 개발자나 사용자로 부터 자바 클래스를 보호(숨김) 시키는 것이다.
    사용자에게는 잘못된 데이터 입력을 방지하고 개발자로부터 필요 없는 정보를 숨겨준다.

캡슐화
  : 데이터와 함수 등 객체와 관련된 것들을 하나로 묶는 것을 말한다. 흔히 정보 은닉과 함께
    연관지어 사용되는 개념으로 외부에서 알 필요가 없는 데이터와 행위는 보이지 않게 한다.

상속
  : 클래스의 기능을 확장하는 여러방법 중 하나로, 기존 클래스를 수정하지 않으면서도 이미 정의되어
    있는 내용을 확장해서 사용할 수 있는 방법을 제공하는 것을 말한다.
    예를 들어 자동차라는 클래스을 A가 상속하여 기능을 추가하고 택시 클래스로 정의하는 것을 말한다.

다형성
  : 오버로딩, 오버라이딩, 상속 등을 복합적으로 사용함으로써 하나로 여러가지 처리를 하는 것을 말한다.
    예를 들어 오버로딩은 하나의 메서드가 여러가지 기능을 포함하고 있는 것을 다형성이라 한다.

추상화
 
 : 인터페이스와 구현을 분리하는 것을 말한다. 추상화를 통해 객체가 가진 특성 중 필수 속성만으로 객체를 
    묘사하고 유사성만을 표현하며 세부적인 상세 사항은 각 객체에 따라 다르게 수현되도록 할 수 있다.

자바에서 데이터 표현방법은 8가지로 구분된다.
논리형 - boolean(true, false)
문자형 - char (2byte)
정수형 - byte (1byte)
          - short (2byte)
          - int (4byte)
          - long (8byte)
실수형 - float (4byte)
          - double (8byte)

기본자료형은 자바컴파일러에 의해서 해석되는 자료형태을 말하며, boolean, byte, char, short, int, long, float, double과 같이 변수가 실제의 값을 갖는 자료형을 말하고 참조자료형은 배열, 클래스, 인터페이스와 같이 값이 아닌 객체의 주소값을 갖는 데이터 타입을 말한다.
다시말해 변수를 선언할 때, 자바 API에서 제공되거나 프로그래머에 의해서 만들어진 클래스를 자료형으로 사용할때, 이런 데이터 타입를 참조자료형이라 한다.

보다 쉽고 편리하게 이름만 보고 클래스, 변수, 메서드를 구분 할 수 있게 만든 표기법. 카멜 표기법을 사용하면 이름들의 가독성을 높일 수 있다.

- 클래스
    : 이름의 맨 앞글자는 대문자로 이고, 두번째 오는 의미있는 단어 앞글자도 대문자로 한다.
    예) class MyTest

- 변수
   : 이름의 맨 앞글자는 소문자로 이고, 두번째로 오는 단어의 앞글자는 대문자로 한다. 
   예) String myTest (변수명은 가급적 명사로 한다.)

- 메소드
   : 이름의 맨 앞글자는 소문자 이고, 두번째로 오는 의미있는 단어의 앞글자는 대문자이다.
   예) public String createMyTest  (메소드명은 가급적 동사로 시작한다.)

import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.Image;

class WindowTest extends Frame {

 public void init(){ //윈도우창 만들기
  setTitle("내가만든 윈도우");
  setBounds(600, 400, 300, 400); //우로 600, 아래로 400만큼 가서 300x400창만들기
  setVisible(true); //창열기
 }

 public void paint(Graphics g){
  g.drawString("이미지 그리기", 100, 80);  //(100,80)위치에 글씨입력

  // Toolkit tk = Toolkit.getDefaultToolkit();
  // Image img = tk.getImage("c:/java_se/0926/hahaha.gif");
  Image img = Toolkit.getDefaultToolkit().getImage("c:/java_se/0926/hahaha.gif"); //이미지 불러오기

  g.drawImage(img,110,100,this); //이미지 입력
 }

 public static void main(String[] ar){
  new WindowTest().init();
 }

}


 

import java.util.Date;
import java.util.Calendar;
import java.util.GregorianCalendar;

class Today{

 public static void init(){
  System.out.println("오늘 날짜 : " + new Date());
  
  //Calendar cal = new GregorianCalendar(); //sub class 이용
  Calendar cal = Calendar.getInstance(); //메소드 이용
  String date = cal.get(cal.YEAR)+"년"
      +(cal.get(cal.MONTH)+1)+"월"
      +cal.get(cal.DAY_OF_MONTH)+"일";
  System.out.println("현재 날짜 : " + date);
 }
 public static void main(String[] args){
  //Today t = new Today();
  //t.init();

  new Today().init();
 }

}

솔직히 오버 로딩은 크게 필요한 이유가 없을거라 생각됩니다 어디까지나 코당하는 사람의 편의 성을 위한것이 니까요..
예를 들자면 sum이라는 여러개의 숫자를 더하는 메소드가 있다고 하면..
오버로딩 개념이 없다면...
sum1(a,b) sum2(a,b,c)...
이런식이 될텐데
오버로딩으로 인해
sum(a,b) sum(a,b,c)등으로 일관성을 유지 할수 있기에 코딩하는사람이나 분석하는 사람이 보기가 편하게 되죠..
생성자를 통한 다양성으로 많은 변화가 가능하니까요.

단 오버로딩은 생성자 개념에서는 아주 중요 합니다.
클레스를 생성할때 한개의 클레스를 여러 형태로 변화 시켜 만들수있으니까요
필요없다고는 했지만 정말 중요한 개념입니다.^^ㅋ

오버라이딩은 아주 중요한개념이데요...
오버라이딩을 통해 업케스팅도 가능하게 되는거 니까요..
간단히 설명하자면...
이미짜여진 클레스의 메소드들을 파츠형식의 관리라고 생각하시면 될겁니다.
예를 들어 총을 생각해보면요...
일반 총이 있었다고 생각 해보세요 (상위클레스)
한데 사용자가 다른 부분은 남겨두고 총앞부분을 소음기 를 달았다면..(하위클레스를 통한 오버라이딩)
일반 총이 소음총이라고 하나요?? 총을 쏠때 소리가 안나겠죠..
또 요번엔 총의 조준 하는부분을 망원경으로 바꿨다면..저격총이 될수 있는겁니다

이런개념이 오버라이딩에 가장좋은점인 것 같습니다.
한번 완성된 클레스를 재구현(오버라이딩)함으로서..
많은 변화를 줄수 있고, 한번 잘만들어진 클레스를 조금씩 바꾸어가며 마음대로 사용 할수 있겠죠..
자바의 특징이라는 다양성과 재사용성의 증가는 오버라이딩 덕인거 같습니다.

원문: 이곳

BufferedReader와 Scanner는 기본적인 기능은 같죠.. 파일이나 키보드로 정보를 입력받을수 있다는..

하지만 가지고 있는 기능은 Scanner가 훨씬 많죠..

BufferedReader의 경우 파일이나 키보드로 입력받은 정보는 read 혹은 readLine로 읽어올수 있습니다.

read는 읽어온 값을 int로 readLine은 String으로 반환하죠..

Reader에서 없는 readLine이 있어 한라인을 전부 읽어올수 있는건 편하지만 입력된 정보가 int든 double이든 상관없이 무조건 String으로 입력을 받죠..

Scanner는 JDK1.5에서 추가된 클래스로 기본적인 BufferedReader을 가지고 있으면서 그외에 여러 편리한 기능을 가지고 있죠..

예를 들어 패턴을 지정해서 지정된 패턴의 값만을 읽어 올수도 있으며 int. dobule등의 형으로 읽어올수도 있습니다.

API에 있는 몇개의 메소드를 보죠..

hasNextInt(), hasNextDouble()와 같은 형식의 메소드들은 읽어올 값이 무슨형인지 체크할수 있습니다.

nextInt(), nextLong()와 같은 형식의 메소드들은 읽어들이는 값을 String이 아닌 형식으로 자동으로 변환해줍니다.

next(Pattern pattern)같은 경우는 설정된 패턴과 일치하는 데이터를 검색해서 가져올수도 있습니다.

이렇듯 BufferedReader에 비해 Scanner는 강력한 여러 기능들이 추가된 클래스입니다.

JDK의 버젼이 조금더 올라가면 BufferedReader가 비추천이 되고 Scanner로 바뀔지도 모르겠네요.. ^^

Scanner에는 위에서 설명한 메소드이외에도 사용할만한 메소드가 많으니 한번쯤 API를 보는것도 나쁘지 않을꺼 같네요..

원문  : http://down.file.naver.com/howpc/kin.nhn?m=read&section=read&docid=9630935&page=493

시스템에서 더 이상 사용하지 않는 동적 할당된 메모리 블럭 혹은 개체를 찾아 자동적으로 다시 사용 가능한 자원으로 회수하는 것을 말한다.
시스템에서 가비지 컬렉션을 수행하는 부분을 가비지 컬렉터Garbage Collector라고 하며, 최초의 가비지 컬렉터는 1958년에
존 매카시John McCarthy에 의해 리습Lisp 언어의 일부로 구현되었다. 가비지 컬렉션은 약자로 GC라고 부르기도 한다.


쉽게 말해 자바 프로그램이 더이상 참조되지 않는 메모리 즉, 쓰레기 값을 수집하여 시스템에 되돌려 주는 것을 말한다.
가비지 컬렉션 알고리즘에서는 쓰레기 값을 찾아 해당 개체가 사용하는 리소스를 회수하는 동작을 한다.

+ Recent posts