자바(Java) - 해시테이블(HashTable) 개념 및 예제

안녕하세요

이번 시간에는 자바에서 해시테이블(HashTable)에 대한 개념과 예제를 올려봅니다.

저도 책을 통해 처음 알았습니다.



HashTable은 Map(인터페이스) 계열에 속하며

Object 유형을 저장할 수 있으며, key와 value를 매핑하여 저장합니다.

또한 데이터가 75% 차면 자동으로 저장 영역을 확대하고 key값의 중복을 허용하지 않습니다. 

- 데이터 저장 : Object put(Object key, Object val)
- 데이터 꺼내오기 : Object get(Object key)
- 벡터는 순서, Map은 무순서


그럼 해시테이블 예제와 결과 화면을 보여드리겠습니답~!

package testtest;

import java.util.*;

public class test {
public static void main(String[] args) {
Hashtable h=new Hashtable();
h.put("하나", new Integer(1));
h.put("둘", "Two");
h.put("셋", "Red");
h.put("파랑", java.awt.Color.blue);
Object val=h.get("둘");
String str=(String)val; // Object 유형의 val을 String형으로 바꾼다, (Generic을 안써서 불편하다)
System.out.println(str);
java.awt.Color cr=(java.awt.Color)h.get("파랑");
System.out.println(cr);
//Generic을 사용하지 않으면 형변환을 해야한다.
//Generic을 사용하려면 저장할 유형(K,V)을 두개 지정해야한다.
//Generic => Hashtable(K,V)
Hashtable<String,Integer> h2=new Hashtable<String,Integer>();
h2.put("생년", new Integer(1945));
h2.put("나이", 79); //Auto Boxing -> 자동으로 래퍼클래스로 변환
h2.put("연봉", new Integer(5000));
Integer age=h2.get("나이");
System.out.println("age: "+age);
/*Enumeration<K> keys() : 키 값들을 Enumeration(반환) / 객체로 반환한다.
Returns an enumeration of the keys in this hashtable.
Enumeration<V> elements() : value 값들을 Enumeration(반환) / 객체로 반환한다
Returns an enumeration of the values in this hashtable.
Collection<V> values() : value 값들을 Collection 형태로 반환한다. / 객체로 반환한다
Returns a Collection view of the values contained in this map.
*/
//h2의 키 값을 반복문 통해 추출하여 출력하기
//키 값을 String형으로
//Enumeration<K> keys()
Enumeration<String> en=h2.keys();// en에 커서가 있다
while(en.hasMoreElements()){
String key=en.nextElement();
Integer val2=h2.get(key);
System.out.println(key+"==>"+val2);
}
Enumeration<Integer> en2=h2.elements();
for(;en2.hasMoreElements();){
Integer val3=en2.nextElement();
System.out.println(val3);
}
System.out.println("==============");
//Iterator<E> iterator() 
//Returns an iterator over the elements in this collection. 
Collection<Integer> en3=h2.values();
Iterator<Integer> it=en3.iterator();
while(it.hasNext()){
Integer i=it.next();
System.out.println(i);
}
System.out.println("########################");
//확장 for 루프
for(Integer i:en3){
System.out.println("i="+i);
}
}
}



자바(Java) - 벡터 클래스와 캡슐화 활용 예제

안녕하세요

이번 시간에는 저번 시간에 활용했던 백터(Vector)와 캡슐화를 활용한 예제를 올려봅니다.

package testtest;

import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;

class Person{
private String name;
private int age;

public Person(){

}

public Person(String name, int age){
this.name=name;
this.age=age;
}

public void setName(String name){
this.name=name;
}

public String getName(){
return name;
}

public void setAge(int age){
this.age=age;
}

public int getAge(){
return age;
}

}

public class test {

public static void main(String[] args) {
//[1]Person 객체 3개 생성하기
Person p1 = new Person("할아버지",78);
Person p2 = new Person("할머니", 74);
Person p3 = new Person("아버지", 55);
p1.setName("할아버님"); p1.setAge(79);

//[2]위에 생성한 객체를 저장할 Vector생성하기
Vector<Person> v1=new Vector<Person>();

//[3]Vector에 Person객체 저장하
v1.add(p1); v1.add(p2); v1.add(p3);

//[4] v1에 저장된 Person을 꺼내서 이름, 나이 출력하기
for(int i=0;i<v1.size();i++){
System.out.println("이름 : "+v1.get(i).getName() + " 나이 : "+v1.get(i).getAge());
}

System.out.println("--확장 for 루프--");

//확장 for루프
for(Person str:v1){
System.out.println("이름 : " + str.getName() + " 나이 : " + str.getAge());
}

//Vector의 메소드
//[1] void copyInto(Object[] anArray)
//벡터에 저장된 객체를 배열에 카피해준다.

Person arr[]=new Person[v1.size()];
v1.copyInto(arr);

for(Person ps : arr){
System.out.println(ps.getName()+"#");
}

//[2] Enumeration<E> elements()
/* 벡터에 저장된 객체들을 한꺼번에 꺼내오고자 할 때 사용하는 메소드
* Enumeration과 Iterator인터페이스는 객체들을 집합체로 관리하게 해주는 인터페이스이다.
* 이들 인터페이스에서는 각각의 객체들을 한 순간에 하나씩 처리할 수 있는 메소드를 제공한다.
*
* # Enumeration의 경우
* boolean hasMoreElements(): 논리적 커서(첫번째 요소 직전에 위치) 이후에 요소들이 있는지 물어서 있으면 true를 반환 하고 없으면 false를 반환한다.
* E nextElement() : 논리적 커서를 다음 요소로 이동하고 현재 가리키고 있는 요소를 반환한다.
*
* #Iterator의 경우
* boolean hasNext()
* E next()
* */

Enumeration<Person> en=v1.elements();
while(en.hasMoreElements()){
Person ps=en.nextElement();
System.out.println(ps.getName()+"@"+ps.getAge());
} // false면 while문을 빠져나감

//[3] Iterator<E> iterator()
//v의 iterator()메소드를 이용해 v에 저장된 객체 꺼내와 이름 나이 출력하세요.

Iterator<Person> it=v1.iterator();
for(int i=1;it.hasNext();i++){
Person ps=it.next();
System.out.println(i+": "+ps.getName());
}

}
}


자바(Java) - java.util.Vecotr 클래스란?

안녕하세요

이번 시간에는 Vector 클래스의 개념과 간단한 예제를 올려볼까 합니다.

자바에서 벡터(Vector)란 Object 유형의 Collection으로서, 어떤 유형의 객체도 저장할 수 있습니다. (하지만 기본 자료형은 저장이 불가합니다)

벡터는 몇 가지 특징이 있습니다.

- 벡터는 데이터가 가득 차면 자동으로 저장 영역을 확대합니다.

- java.util.List 인터페이스를 구현하는 클래스로 순서대로 정렬되고, 중복도 허용하는 특징을 갖습니다.


일단 벡터를 사용하기 이전에 몇 가지 알아두어야 할게 있습니다.

1) Vector 클래스 생성자

1 - Vector() // 10개 요소를 저장할 공간
2 - Vector(int initialCapacity) // 초기치 용량을 매개변수로 정함
3 - Vector(int initialCapacity, int incre) // 초기 용량과 증가치를 인자로 넣어줌

2) Vector에 요소 저장

Vector v = new Vector(5);
v.add("Hello"); v.add(new Integer(10)); // 벡터의 0번째, 1번째에 순차적으로 저장

3) Vector에서 꺼내오기

Object obj = v.get(0);
String str=(String)obj;
Integer i=(Integer)v.get(1);

4) elements()/iterator()로 벡터 요소 꺼내오기

- Enumeration과 Iterator인터페이스는 객체들을 집합체로 관리하는데, 이들 인터페이스에는 각각의 객체들을 한순간에 하나씩 처리할 수 있는 메소드를 제공합니다.

- Vector의 메소드 : Enumeration elements()
/***********************************************
Enumeration 인터페이스에 있는 주요 메소드
1>boolean hasMoreElements()
2>E nextElement()
***********************************************/

- Vector의 메소드 : Iterator iterator()
/***********************************************
Enumeration 인터페이스에 있는 주요 메소드
1>boolean hasNext()
2>E next()
3>void remove()
***********************************************/

자 그럼 벡터를 활용한 간단한 예제와 결과 화면을 보면서 이 시간을 마무리 짓겠습니답

package testtest;

import java.util.*;
import static java.lang.System.out;

public class VectorTest {

public static void main(String[] args) {

Vector v=new Vector(5,3);
//초기 용량 : 5, 증가치 : 3

out.println("v의 용량: "+v.capacity()); // 5
out.println("v의 크기: "+v.size()); // 0

for(int i=1;i<=10;i++){
v.add(new Integer(i));
}

out.println("벡터v에 요소 저장 후-------------");
out.println("v의 용량: "+v.capacity()); //11 i가 5일때 +3, 10일때 +3
out.println("v의 크기: "+v.size()); //10

v.add(new Double(3.14)); //double 유형의 객체로 new를 안했을시 Autoboxing되어 저장됨(하지만 new를 하는게 좋음)
v.add("Hello");

//벡터는 object유형의 객체를 저장할 수 있다.
out.println("v의 용량: "+v.capacity()); //14
out.println("v의 크기: "+v.size()); //12

//벡터에 요소 저장하기 => add(Object o), addElement(Object o)

//벡터에 요소 꺼내오기 => Object get(int index), Object elementAt(int index)

Object obj=v.get(3);
Integer i=(Integer)obj;
out.println("i="+i);

Double dbl=(Double)v.get(10);
out.println("dbl="+dbl);
out.println("----5.0이후---------------");

//Generic 사용
//v2는 String유형만 저장하는 벡터가 된다.
Vector<String> v2=new Vector<String>();
for(i=1;i<6;i++){
v2.add("Java "+i);
}

String str=v2.get(0); // Generic을 사용하면 형변환이 필요없다~!
System.out.println("str="+str);

//for루프 이용해서 한꺼번에 v2에 저장된 요소를 출력하세요
for(int j=0;j<v2.size();j++){
String s=v2.get(i);
out.print(s);
}

//벡터를 생성하여 Float객체 3개를 저장하세요
//Generic 사용해서 for루프 이용해 꺼내와 출력하세요
Vector<Float> v4=new Vector<Float>(3,2);
v4.add(10.456f);
v4.add(new Float(12.56));
v4.add(100f);
v4.add(1, new Float(312)); // 인덱스가 1인 곳에 312.0을 저장
     //(index, Object)

for(int j=0;j<v4.size();j++){
Float fval=v4.get(j);
out.println(fval);
}

//Generic을 사용했다면 확장 for루프 이용할 수 있다.
out.println("#####");
for(Float a:v4){
out.print(a);
}

//[문제1]확장 for루프를 이용해 arr에 저장된 값 출력하세요
//배열은 애초에 같은 데이터가 있기 때문에 Generic 안 사용해도 됨

int arr[]={1,2,3,4};
for(int x:arr){
out.println(x);
}

//[문제2]v2를 확장 for루프 이용해 출력하세요
for(String s:v2){
out.println(s);
}

}
}

== 결과 화면 ==



자바(Java) - 로컬 이너클래스 간단 예제

안녕하세요

이번 시간에는 자바에서 활용도가 높은 로컬이너클래스 예제를 올려볼까 합니다.

잘 봐주세요~!!

/*로컬이너클래스: 메소드 블럭 내부 또는 인스턴스 블럭 내부에 클래스를 구성한 경우를 의미
 * 1)이름있는 로컬 이너클래스
 * 2)이름없는 로컬 이너클래스
 * */
public class Local {

String str = "@@@"; // 멤버변수
public void foo(){
class LocalInner{ // 일정 범위 내에서 동일한 이름으로 클래스 설정 가능

}
}

public void sub(){
final int num=100; // //지역변수(8버전 이후 fianl 안붙여도 됨)
System.out.println("str="+str);
System.out.println("num="+num);

// LocalInner a = new LocalInner(); <-- 이것은 안됨. 밑에가 구성되고 난 이후에 됨..

class LocalInner{
String lstr="####";
public void print(){
System.out.println("str: "+str);
System.out.println("lstr: "+lstr);
System.out.println("num: "+num);
/*이전 버전에서는 로컬 이너클래스 안에서는 final이 아닌 지역변수는 접근불가*/
}
}

LocalInner li = new LocalInner();
li.print();
/*로컬 이너클래스는 자기가 속한 메소드 안에서
* 객체 생성을 해야 한다.
* 다른 메소드에서는 객체생성 불가능.(main에서도 안됨)
* 또한 로컬이너클래스가 구성된 후에 객체 생성이 가능함
* */
}


public static void main(String[] args) {

Local lc = new Local();
lc.sub();
}
}

위의 소스 코드를 실행하시면 아래와 같은 결과 화면이 출력됩니다.




자바(Java) - 멤버(Member) 이너 클래스 예제

안녕하세요

이번 시간에는 Member Inner 클래스 예제를 올려봅니다.

이 부분은 계속 좀 보고 공부해야 될 것 같네요.

아직도 개념이 헷갈리네요 ㅋ ㅜ

public class Outer{
int a=10;
static int b=20;

class Inner{ //Inner Member- a)non-static 클래스
int c=30;
void sub(){
System.out.println("sub()");
}

}//Inner class//

static class SInner{ //Inner Member - b) static 클래스
int d=40;
void foo(){
System.out.println("foo()");
}

static void bar(){
System.out.println("bar()@@@");
}

}
} // Outec Class

이제 메인 클래스 InnerClassTest 에서 Outer 클래스의 변수 값을 출력해보겠습니다.

public class InnerClassTest {

public static void main(String[] args) {
//1)Outer 클래스의 a,b 변수값을 출력하세요
Outer o=new Outer();
System.out.println("o1.a = "+o.a);
System.out.println("o1.b = "+o.b);

//2)Inner 클래스의 c변수값 출력하고 sub() 메소드 호출하기
Outer o1=new Outer();
Outer.Inner oi=o1.new Inner();
System.out.println("oi.c = "+oi.c);
oi.sub();

// 위의 2줄을 한 줄로..
Outer.Inner o2=new Outer().new Inner();
o2.sub();

//3)SInner클래스의 d 출력, foo(), bar() 호출하기
Outer.SInner sn=nw Outer.SInner();
System.out.println("sn.d = "+sn.d);
sn.foo();
Outer.SInner.bar(); // static이니 바로 접근 가능


}
}

위 예재를 실행한 결과 화면은 아래와 같습니다.



자바(Java) - Inner Class 정의 및 분류

안녕하세요

이번 시간에는 자바에서 이해하기 좀 어려운 개념인 이너클래스(Inner class)에 대해 글을 써봅니다.

개인적으로 저한테 좀 헷갈려서 블로그에서 정의도 해볼겸, 글 쓰면서 다시 한번 개념을 복습하려고 합니다 ㅜ

먼저 Inner Class의 정의는

'클래스 안에 클래스를 구성하는 것' 입니다.



위 그림을 보시면 클래스 A 안에 클래스 B가 있습니다. 

그 클래스 B를 Inner 멤버 클래스라고 하며, non-static 클래스. static 클래스로 나뉘어집니다.

클래스 B 밑에 func 함수가 있는데, 그 안에 클래스 C가 있습니다.

그 클래스 C를 Inner 로컬 클래스라고 합니다. 

Inner 로컬 클래스는 Named Local Class(이름 있는 로컬 클래스)와 Anonymous Class(이름 없는 클래스)로 나뉘어집니다.

이 포스팅 이후에 이너 클래스의 예제를 올려봅니다.

자바(Java) - Frame을 이용하여 간단한 메모장 만들기

안녕하세요

이번 시간에는 자바에서 Frame을 이용하여 메모장을 만드는 것을 해봅니다.

먼저 제가 만든 결과 화면은 아래와 같습니다.




크게 메뉴는 파일(F), 색상(C)으로 두 개 있고, 각각의 메뉴에 세부 메뉴가 있습니다.

자 그럼 이제 소스코드를 한번 보시죠~


public class MyNotePad extends Frame implements ActionListener(){
 TextArea ta;
 MenuBar bar; 
 menu mnFile, mnColor, mnNew, mnFntColor;
 MenuItem miOpen, miSave, miExit;
 MenuItem miBgY, miBgG, miFgR, miFgB; // 배경, 글자색
 Label lb;
public MyNotePad(){
 super(":::MyNotePad v1.1:::");
 ta=new TextArea();
 add(ta, "Center");
 lb=new Label("Status");
 add(lb, "South");
 //1.메뉴바를 Frame에 붙인다.
 //메뉴바를 붙일 때는 setMenuBar()를 이용
 bar = new MenuBar();
 setMenuBar(bar);
 //2.메뉴를 생성해서 메뉴바에 붙인다.
 mnFile=new Menu("파일(F)");
 mnColor=new Menu("색상(C)");
 bar.add(mnFile); bar.add(mnColor);
 //MenuShortcut은 단축키 지정
 miOpen=new MenuItem("열기(O)", new MenuShortcut('O'));
 MenuShortCut ms = new MenuShortCut('S');
 miSave = new MenuItem("저장(S)", ms);
 miExit = new MenuItem("끝내기(X)", new MenuShortcut('X', true);
 //구분선 주기
 mnFile.addSeparator();
 mnFile.add(Exit);
 mnFile.addSeparator();
 //서브메뉴 만들기
 //메뉴에 메뉴를 붙이면 서브 메뉴가 된다.'
 mnNew = new Menu("New(N)");
 mnFile.add(mnNew);
 mnNew.add(new MenuItem("New File");
 mnNew.add(new MenuItem("Java Project");
 mnNew.add("Package"); //문자열로 메뉴 아이템을 등록해도 됨
 //색상의 상단메뉴
 miBgY = new MenuItem("배경색-Yellow"); miBgG = new MenuItem("배경색-Gray");
 mnFntColor = new Menu("글자색");
 mnColor.add(miBgY); mnColor.add(miBgG);
 mnColor.addSeparator(); mnColor.add(mnFntColor);
 //색상의 서브메뉴
 miFgR = new MenuItem("Red"); miFgB = new MenuItem("Blue");
 mnFntColor.add(miFgR); mnFntColor.add(miFgB);
 mnFntColor.addSeparator();
 mnFntColor.add(new MenuItem("Reset");
 //4) 메뉴아이템에 리스너 부착
 miOpen.addActionListener(this);
 miSave.addActionListener(this);
 miExit.addActionListener(this);
 miBgY.addActionListener(this);
 miBgG.addActionListener(this);
 miFgR.addActionListener(this);
 miFgB.addActionListener(this);
 //Reset 리스너 부착
 mnFntColor.addActionListener(this);
     
 }//Constructor()------
 
 @Override
 public void actionPerformed(ActionEvent e){
  Object o=e.getSource();
  //reset 처리(문자열 비교)
  String cmd=e.getActionCommand();
  if(cmd.equals("Reset")){
   ta.setBackground(Color.white);
   ta.setForeground(Color.black);
  }
  if(o==miExit){
   //시스템 종료 코드
   System.exit(0);
  }else if(o==miOpen){
   //FileDialog 객체를 생성해서 setVisible(true)메소드를 호출한다.
   //Frame f1 = new Frame();
   FileDialog fd = new FileDialog(this);
   fd.setVisible(true);
  
   //fd에서 선택한 파일의 절대경로를 만들어서 lb에 보여주세요.
   String dir=fd.getDirectory(); // 상위 디렉토리 경로
   String fname=fd.getFile(); // 파일명
   lb.setText(dir+fname);
   String filename=dir+fname;
   //FileReadExceptionTest(제가 직접 클래스 파일로 작성했습니다) 재사용하자
   try{
    String contents=FileReadExceptionTest2.readFile(filename)
    ta.setText(contents);
   }catch(FileNotFoundException ee){
    JOptionPane.showMessageDialog(ta, filename+"파일을 찾을 수 없습니다");
   }catch(IOException ee){
    ta.setText("입출력 오류 발생");
   }catch(Exception ee){
    lb.setText("기타 오류 발생");
   }
  }else if(o==miSave){
   //save는 딱히 구현하지 않았습니다(나중에 추가하겠습니다)
  }else if(o==miBgY){
   ta.setBackground(Color.yellow);
  }else if(o==miBgG){
   ta.setBackground(Color.gray);
  }else if(o==miFgR){
   ta.setForeground(Color.red);
  }else if(o==miFgB){
   ta.setForeground(Color.blue);
  }
 }
  
 public static void main(String args[]){
  MyNotePad my = new MyNotePad();
  my.setSize(500,500);
  my.setVisible(true);
 }
}

미스테리생물(Mysterious creatures No.20) - 데본기 시대에서 바다의 해왕색 패기.. '던클레오스테우스'


안녕하세요

오랜만에 미스테리 생물을 쓰네요..

쓸 시간은 있었지만 피곤해서 못썼습니다.

오늘 소개할 생물은 데본기 바다에서 가장 쎈 생물인 '던클레오스테우스' 입니다.

자 한번 보시죠



 

 사진이 좀 작게 나와서 이 생물의 크기가 좀 작아보입니다.
크기는 대략 10m가 넘고 두께가 5cm.. 5cm가 얇아보이지만 자를 보면 결코 작은게 아닙니다..





 

 이 생물은 또 '갑옷물고기'라고도 불립니다.






 

 이 사진을 보면 아시겠지만 정말 갑옷을 입은것처럼 보입니다.
그리고 이 생물은 '이빨'이 없습니다. 이빨을 쓰지 않고 위 아래턱에 날카로운 '뼈'를 사용합니다.





데본기 시대에 던클레오스테우스의 유일한 적수가 하나 있었는데,

그 생물의 이름은 티타니크티스입니다.

하지만 데본기 시대의 최강의 생물들도..




 

 3억 8천년전 데본기 시대에서 최강이였지만 메갈로돈 같은 생물을 만났으면...
아주 개털렸을겁니다;;



자바스크립트 - 자동차 가격 옵션 체크 박스 예제

안녕하세요

이번 시간에는 저번 시간에 있었던 체크박스 기초 예제를 좀 응용한 예제입니다.

먼저 결과 화면을 보자면 아래와 같습니다.


기본 차량가격은 13450000원입니다.

하지만 옵션에 있는 항목들을 체크하면 기존 차량가격에 플러스가 됩니다.

폼 화면은 그냥 직접 구현해 보시고

로직만 공개하겠습니답~!



/*자동차 옵션 체크 박스를 클릭할 때 마다 함수 
정의문 내에 일련의 실행문을 실행합니다.*/
function car(){
  //[1]초기의 차량 기본 가격(id=total)을 알아내 변수에 할당한다.
 var basic=document.getElementById('total').defaultValue; // 초기값(13450000)만 가져온다, 변경 안됨 
 var basicPrice=parseInt(basic);
 //[2] opt1 ~ opt3 까지 체크박스에 체크가 되어 있으면
    //옵션 가격을 기본 가격에 누적 시킨다.
 for(var i=1;i<=3;i++){
  //체크박스 참조를 얻어온다.
  var obj=document.getElementById('opt'+i);
  if(obj.checked){
   basicPrice+=parseInt(obj.value);
  }
 }
 //[3] 총 가격(id가 total) 요소에 총누적가를 출력한다.
 document.getElementById('total').value=basicPrice;
}
 

자바스크립트 - 전체 선택 체크박스를 클릭하면 모든 옵션이 체크하는 예제

안녕하세요

이번 시간에는 간단한 실습을 할까 합니다.



위 그림처럼 전체선택 체크박스를 누르면 아래의 세개의 체크박스가 동시에 체크되고

다시 한번 전체선택 체크박스를 누르면 세개의 체크 된것이 사라지는 예제입니다.

간단하니 이해하시기 쉬울겁니다.



var objAll=document.getElementById('allChk');
var ch1=document.getElementById('opt1');
var ch2=document.getElementById('opt2');
var ch3=document.getElementById('opt3');
objAll.onclick=function(){
 //전체 선택에 체크했다면 모든 체크박스를 체크
 if(this.checked){ // this란 체크박스(objAll)
  ch1.checked=true;
  ch2.checked=true;
  ch3.checked=true;
 }else{
  //아니면 모두 해제
  ch1.checked=false;
  ch2.checked=false;
  ch3.checked=false;
 }
}

자바스크립트 - 배열과 정렬을 활용하여 테이블 구성하기

안녕하세요

이번 시간에는 자바스크립트에서

특정한 데이터를 배열에 넣고, 그 데이터를 정렬하여 테이블로 구성하는 것을 올려봅니다.

먼저 결과 화면을 보면 다음과 같습니다.




자 그럼 소스 코드를 한번 보시죠~!!


var cars=[
{type:"BMW", year:"2016"},
{type:"Sonata",year:"2013"},
{type:"Volvo",year:"2014"},
{type:"Saab",year:"2011"}];
var str="";
str+="";
str+="";
str+="";
for(var i=0;i<4 i="" str="" tr="">
유형년도
"; str+="

"+cars[i].type+"

"; str+="
"; str+="

"+cars[i].year+"

"; str+="
"; } str+=""; var obj=document.getElementById('demo'); obj.innerHTML=str; // 출시 연도별로 내림차순으로 정렬하여 테이블 형태로 보여주기 var obj2=document.getElementByid('demo2'); cars.sort(function(a,b){ return b.year-a.year; }); var str3=showTable(cars); function showTable(cars){ var str="
"; str+=""; for(var i=0;i
유형연도
"+cars[i].type+""+cars[i].year+"
"; } return str; } obj2.innerHTML="

출시연도별

"; obj2.innerHTML+=str3; cars.sort(function(a,b){ return b.year-a.year; });

자바스크립트 - 배열의 함수를 사용해보자~!

안녕하세요

이번 시간에는 자바스크립트에서 배열의 함수를 사용한 예제를 볼까 합니다.

http://www.w3schools.com/ 에 들어가니 정말 많은 함수들이 있더군요

하지만 이번 예제에서는 10개 정도만 쓰겠습니다.

제가 예제에서 사용한 함수들은 아래와 같습니다.

 [1] join(str) : 배열 내 요소들을 구분문자 str로 연결하여 문자열을 반환
 [2] pop() : 배열 끝의 요소를 삭제
 [3] push(data) : 배열 끝에 요소(data)를 추가
 [4] shift() : 배열 선두의 요소를 삭제
 [5] unshift(data,..) : 배열 선두에 지정 요소를 추가
 [6] sort([func]) : 요소를 오름차순으로 정렬
 [7] reverse() : 역순으로 정렬(반전)
 [8] concat(arr) : 지정 배열을 현재의 배열에 추가
 [9] splice(start, len) : start위치에서 len만큼을 삭제
     splice(start, len, data, data...)
     :start위치에서 len만큼 삭제하고 date들을 추가
[10] slice(start [, end]) : start에서부터 end-1번째 요소들을 추출하여 배열객체를 반환


위의 사진은 결과 화면이고,

자 그럼 예제 바로 들어가봅니다~!!



var fruits = ["Banana", "Orange", "Apple", "Mango"];
var obj=document.getElementById('demo');
var x=fruits.pop();;
var y=fruits.push("Kiwi"); // 배열 마지막에 추가
fruits.shift(); //배열 맨 앞의 요소를 제거
fruits.unshift("Lemon"); // 배열 맨 앞의 요소를 추가
var z=fruits.slice(0,3);
//splice()이용해서 "Apple"을 삭제해보세요.
fruits.splice(2,1);
var greenLine=["당산","합정","홍대입구","신촌"];
var goldLine=["여의도","노량진","동작","고속터미널"];
var line=greenLine.concat(goldLine);
line.sort();//오름차순으로 정렬
line.reverse(); //내림차순으로 정렬
var kor=[95,20,55,45,88,77,100];
kor.sort(); // sort()는 문자열을 기준으로 정렬함 "95" "20" "100".. 식으로
//오름차순으로 정렬
kor.sort(function(a,b){
 return a-b;
});
kor.sort(function(a,b){
 return b-a;
});

자바스크립트 - 정규식 활용 예제

안녕하세요

이번 시간에는 자바스크립트에서 정규식을 활용하는 간단한 예제를 올려봅니다.

정규식은 문자열에서 문자 조합에 일치 시키기 위하여 사용되는 패턴으로

대표적인 규칙은 아래와 같습니다.

- 정규식 -

============================================

/ 규칙 / : 정규식의 규칙을 쓸 때는 제일 문장 앞과 뒤에 '/'으로 감쌉니다.

^ : 시작을 의미

$ : 끝을 의미

[] : 범위

+ : 1개 이상 나타난다는 것을 의미

[^abc] : a,b,c를 제외한다는 의미

a-z: 알파벳 소문자

A-Z: 알파벳 대문자

0-9: 숫자

[!,_,@] 기호를 허용한다

? : 0이거나 1개

* : 0개 이상 반복된다는 의미

\b : 단어의 경계를 나타내며, 해당 패턴이 정확히 일치해야 함을 의미한다.

\d{4}: 숫자 4개가 와야 한단 의미

\d{1,2}: 숫자가 1개 또는 2개 올 수 있단 의미

[-\/]: -이 오거나 /가 올 수 있단 의미

정규식을 이용해서 제가 구현한 결과 화면은 아래와 같습니다.


사실 앞선 예제와 비슷하긴 하지만

이번 예제는 정규식을 이용한겁니다.

============================================

제가 쓴 규칙들은 위와 같고, 다른 규칙들이 사실 더 있습니다.

그런 규칙들은 정규식을 검색해서 보시면 됩니다.

자 어쨋든 그럼 시작하죠


// 아이디 체크
// RegExp객체를 사용하여 패턴 생성
var isUserid=function(){
	var pattern=new RegExp(/^[a-zA-Z0-9!@/]+$);
	var bool=pattern.test(obj.value);
	//val이 정규식 패턴에 맞으면 true를 반환하고 틀리면 false를 반환한다.
	return bool;
}
// 전화번호 체크
var isTel=function(obj){
	//0-9 뒤에 있는 -,+는 각각의 기호를 의미
	var pattern=new RegExp(/^[0-9-+]+$/);
	var val=obj.value;
	var bool=pattern.test(val);
	return bool;
}
// 이메일 체크
var isEmail=function(obj){
	var pattern=new RegExp(/^[\w-]+(\.[\w-]+)*@([\w-]+\.[a-zA-Z]+$/);
	/*^[\w-] : 알파벳문자, 숫자, 하이픈(-)이 처음에 올 수 있단 의미
			  (\.[\w-]+)* : 마침표(.)와 그 다음에 하나 이상의 알파벳 문자,숫자,- 이 0번 이상 나올 수 있단 의미(*)
			  @ : 해당 위치에 @가 와야한단 의미
			  ([\w-]+\.)+ : 알파벳, 숫자, -이 한번 이상 나오고 그 다음 마침표(.)가 나온다는 의미
			  그리고 이 조합이 한번 이상 나올 수 있단 의미
			  [a-zA-Z]+$ : 알파벳 대문자, 소문자 상관없이 문자로 끝나야 함을 의미 
			*/
	var bool=pattern.test(obj.value);
	return bool;
}
// 날짜체크
var isDate=function(obj){
	/*생년월일 날짜 유형 체크
		[2016-02-15] [2016/02/15]
		\b : 단어의 경계를 나타내며, 해당 패턴이 정확히 일치해야 함을 의미한다.
		\d{4}: 숫자 4개가 와야 한단 의미
		\d{1,2}: 숫자가 1개 또는 2개 올 수 있단 의미
		[-\/]: -이 오거나 /가 올 수 있단 의미
		*/
	var pattern=new RegExp(/\b\d{4}[-\/]d{1,2}[-\/]\d{1,2}\b/);
	var bool=pattern.test(obj.value);
	return bool;
}
var check=function(){
	if(!isUserid(frm.uid)){
		alert("아이디는 영문자,숫자,!,_,@여야 해요");
		frm.uid.select();
		return;
	}
	if(!isTel(frm.tel)){
		alert("연락처가 숫자가 아니에요");
		frm.tel.focus();
		return;
	}
	if(!isEmail(frm.email)){
		alert("이메일 형식이 맞지 않아요");
		frm.email.select();
		return;
	}
	if(!isDate(frm.birth)){
		alert("날짜형식이 맞지 않아요");
		frm.birth.select();
		return;
	}
	frm.submit();
}