math.random을 사용하면  0 < 난수 <1 의 랜덤값이 발생한다.

class Nansu {
 public static void main(String[] args) {
  double a = Math.random();
  System.out.println(a);
 }
}

이것은 많은 랜덤값을 얻는데 사용한다.
예를 들어 로또의 수를 얻는다 하면 1부터 45까지의 수가 나와야 한다.
class Nansu {
 public static void main(String[] args) {
  int a = (int)(Math.random()*45)+1;  //난수에 45를 곱해주면  값 >0 and 값<44 이 나온다. +1를 해주면 1~45값이 출력
  System.out.println(a);
 }
}

중요한것은 난수는 소수값으로 나왔는데 지금과 같은 경우 정수로 변하기 때문에 형변환에 신경써야 한다.

이와 같은 방식으로 가위바위보게임도 만들 수 있다.
1~3까지의 난수를 발생시켜 각각 1이 나올경우 바위, 2가 나올경우 가위, 3이 나올경우 보로 하여
if문으로 돌려 주면된다.

String 클래스에서 substring(), toLowerCase(), concat(), trim() 등의 메소드를 생각하면 String 클래스는 
변경 가능한 클래스처럼 보인다. 그러나, 실제로는 이러한 메소드들은 원래 객체와 다른 새로운 String 객체를 
만들어 반환한다. 또 하나의 String 객체가 생성되는 것이다. 따라서 원래 String 객체는 가지고 있는 문자열이 
변경되지 않으며 여전히 사용가능한 채로 남는다.

StringBuffer 클래스는 가지고 있는 문자열의 내용을 변경 가능하도록 만든 클래스이다. 
즉, append(), insert(), delete() 등의 메소드를 통하여 StringBuffer 객체가 가지고 있는 문자열을 변경할 
수 있으며, 이 때, String 클래스처럼 새로운 객체를 생성하지 않고, 기존의 문자열을 변경한다. 이 경우 객체 
생성을 하지 않으므로, String 클래스보다 효율적이라고 생각하기 쉽지만, 동기화(synchronization)를 보장해야 
하기 때문에 단순한 참조에서는 상대적으로 String 보다 나쁜 성능을 보인다. 따라서, 단순 참조가 많은 경우 
StringBuffer 클래스보다 String 클래스가 유리하다. 물론, StringBuffer 클래스는 동기화되어 있으므로, 
멀티 쓰레드에 대하여 안전하다.

split과 StringTokenizer는 둘다 입력되어진 입력값을 일정한 규칙값을 통해 나누는데 사용된다

split의 경우 값이 비어져 있으면 null값으로 인식해 빈값으로 출력되는 반면
StringTokenizer는 값이 비어져 있으면 공간할당을 없이 출력된다.

    예 : "일,이,,삼"으로 입력했을때 ","이 문자를 규칙으로 나눈다고 하면
          split의 경우 [일] [이] [ ] [삼]으로 출력되고
          StringTokenizer의 경우  [일] [이] [삼]으로 출력된다.


import java.util.StringTokenizer;

class StringToken{
 public static void main(String[] args){
  String a = "대전-대구--부산";
  StringTokenizer  b = new StringTokenizer(a, "-");
  for (int i=1; b.hasMoreTokens(); i++){
   System.out.println(i+". "+b.nextToken());
  }
  System.out.println();
  String []c = a.split("-");
  for(int i=0; i<c.length; i++){
   System.out.println((i+1)+". "+c[i]);
  }
 }
}

출력결과


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

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

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

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

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

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

+ Recent posts