달력

4

« 2024/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
2011. 1. 26. 00:16

[면접정리]Beans Pattern의 문제점 Study/Java2011. 1. 26. 00:16

여러 번의 메소드 호출로 나누어져 생성되므로 일관된 상태를 유지하지 못할 수 있다.
:
Posted by 유쾌한순례자
2011. 1. 26. 00:10

[면접정리]SQL INJECTION 방어법 Study/Java2011. 1. 26. 00:10

Sql injection 방어법

PreparedStatement를 이용하여 SQL을 사용

개인적으로 만들어두었던 코드들은 (Statement사용) 예전 포스팅 참조.
:
Posted by 유쾌한순례자
2011. 1. 25. 23:28

[면접정리]Garbage Collection Study/Java2011. 1. 25. 23:28

Garbage Collection

가비지 컬렉션이란 시스템에서 더 이상 사용하지 않는 동적 할당된 메모리 블럭 혹은 개체를 찾아 자동적으로 다시 사용 가능한 자원으로 회수하는 것을 말한다. 

가비지 컬렉션에서 일반적으로 사용하지 않는 개체를 찾는 방법은 프로그램이 접근 할 수 없는 객체는 다시 사용될 가능성이 없다고 판단한다.



http://nix102guri.blog.me/90047185909
http://blog.naver.com/vlueguy7?Redirect=Log&logNo=70097477503

 자세한 설명은 이쪽으로.




:
Posted by 유쾌한순례자
2011. 1. 25. 23:06

[면접정리]객체지향에 대해서 설명 Study/Java2011. 1. 25. 23:06

객체지향이론의 기본 개념은 '실제 세계는 사물(객체)로 이루어져 있으며,

 발생하는 모든 사건들은 사물간의 상호작용이다.'라는 것이다.

객체지향은 다음과 같은 특성을 갖는다.

상속(‌Inheritance),캡슐화(encapsulation),다형성(polymorphism),추상화(abstraction)

객체지향프로그래밍의 장점은 첫번째로 코드의 재사용에 따른 생산성 향상에 있다. 

한 프로그램내의 sub class 들이 super class 속성을 표현한 코드를 재사용하며 그에 따라 생산성이 증대한다. 

두번째는 Natural Modeling에 있다. 즉 객체 클래스 상속 다형성 등 우리의 일상생활에서 보통적으로 생각하는 방식을 

그대로 프로그램 언어로 표현한다.

세번째로는 유지보수가 좀 더 편하다. 

기존 기능을 수정 시 함수를 새롭게 바꾸더라도 캡슐화와 그 함수의 정보가 은폐되어 있어 미치는 영향을 최소화한다. 

네번째로는 신뢰성이 높다. 

제어자와 메서드를 이용 데이터를 보호하고 올바른 값을 유지하도록 하며 

코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지한다.

단점으론 설계를 잘해야 하며 속도가 느리다는 단점이 있다.
:
Posted by 유쾌한순례자
2011. 1. 25. 21:39

IP변환배치파일 작성 Study/ETC2011. 1. 25. 21:39

netsh interface ip set address name="로컬 영역 연결" static 아이피주소 서브넷 게이트웨이 1


ex) 아이피 2.1.1.2
서브넷 255.255.255.0
게이트 2.1.1.1

netsh interface ip set address name="로컬 영역 연결" static 2.1.1.2 255.255.255.0 2.1.1.1 1
:
Posted by 유쾌한순례자
대부분 레지스트리에 uninstall 에서 체크하기 때문에 여기에 있는 해당 프로그램을 지워주면 된다.

위치는

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

:
Posted by 유쾌한순례자
갑자기 php로 개발하게 되버려서 회원가입시 비밀번호 체크 부분을 구현해둔 것 정리.

ajax 처리를 하는 JS 부분

function requestPassword(){

if(document.regForm.password.value == document.regForm.password1.value){
request = getXMLHttpRequest();
request.onreadystatechange=responsePassword;
var url = "./action/checkPassword.php";
var param = "password=" + document.regForm.password.value + "&password1=" +document.regForm.password1.value;
//alert(param);
request.open("POST",url,true);
request.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded;charset=utf-8");
request.setRequestHeader("Cache-Control","no-cache, must-revalidate");
request.setRequestHeader("Pragma","no-cache");
request.send(param);
}else{
document.all.passMsg.innerText="  비밀번호가 일치하지 않습니다.";
document.regForm.password.value="";
document.regForm.password1.value="";
document.regForm.password.focus();
}
}


function responsePassword(){
if(request.readyState == 4){
if(request.status == 200){
var text = request.responseText;
var msg = null;
if(text=="0"){
msg = "  비밀번호는 영문/숫자/특문 포함 8자리 이상입니다.";
document.regForm.password.value="";
document.regForm.password1.value="";
document.regForm.password.focus();
}
else{
msg = "  사용가능한 비밀번호 입니다.";
}
document.all.passMsg.innerText = msg;
}
else{
alert("실패");
}
}
}

그 다음 간단한 정규식으로 체크한 ./action/checkPassword.php 부분

<?
$password = $_POST["password"];
$password1 = $_POST["password1"];
if(preg_match('/[0-9]/',$password) && preg_match('/[a-zA-Z]/',$password) &&                                              preg_match('/[^0-9a-zA-Z]/',$password) && strlen($password)>=8){
echo "1";
}
else{
echo "0";
}
?>


'Study > JS&Ajax' 카테고리의 다른 글

jsbin 2.9.x 커스텀 단축키부분 분석  (0) 2012.10.02
jsbin2.9.x 커스텀 연구  (0) 2012.10.02
:
Posted by 유쾌한순례자
2010. 12. 13. 13:25

제네릭스 (Generics) <발행 No. 공개 No.> Study/Java2010. 12. 13. 13:25

제네릭스는 다양한 타입의 객체들을 다루는 메소드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능이다.

JDK 1.5 로 업 해서 사용할때 가장 적응 안되고 지금도 잘 모르겠고 이러한 부분이다.

자바의 정석 과 기타 인터넷 자료들을 참고하여 정리해두고 계속 봐야 겠다.

참고사이트 : http://cafe.naver.com/javachobostudy/37197
http://www.ibm.com/developerworks/kr/library/j-jtp04298.html#author

참고서적 : 자바의정석  576p ~

정리시작!

컬렉션클래스 <저장할 객체의 타입> 변수명 = new 컬렉션클래스 <저장할 객체의 타입>();

그리고 이게 좋은게 저장된 객체를 꺼낼 때 형변환이 필요가 없다고 한다. (왜냐하면 이미 알고 있기때문에..)

상위 타입을 지정해서 할 수 도 있고..

ex) 자바의 정석 예제에서 발췌

class Product{}
class Tv extends Product{}
class Audio extends Product{}

// Product클래스의 자손객체들을 저장할 수 있는 ArrayList를 생성

ArrayList<Product> list = new ArrayList<Product>();

list.add(new Product());

list.add(new Tv()); // 컴파일 에러가 발생하지 않는다.

list.add(new Audio()); // 컴파일 에러가 발생하지 않는다.

ArrayList가 Product타입의 객체를 저장하도록 지정하면, 이들의 자손인 Tv와 Audio타입의 객체도 저장할 수 있다.

다만 꺼내올 때 원래의 타입으로 형변환해야 한다.

제네릭스에서도 다형성을 적용해서 아래와 같이 할 수 있다.

List<Tv> tvList = new ArrayList<Tv>(); // 허용

그러나 Product클래스가 Tv클래스의 조상이라 할지라도 아래와 같이 할 수는 없다.

ArrayList<Product> list = new ArrayList<Tv>(); // 허용 안함~!!!

그래서 아래와 같이 메서드의 매개변수 타입이 ArrayList<Product>로 선언된 경우

이 메서드의 매개변수로는 ArrayList<Product>타입의 객체만 사용할 수 있다. 그렇지 않으면 컴파일 에러가 발생한다.

public static void printAll(ArrayList<Product> list){
System.out.println("test");
}
public static void main(String args[]){
ArrayList<Product> productList = new ArrayList<Product>();
ArrayList<Tv> tvList = new ArrayList<Tv>();
printAll(productList);
printAll(tvList); // 컴파일 에러


음 그러니까 선언이 된걸로만 사용이 가능하다.!

컬렉션 클랙스 뿐만 아니라 iIterator 에도 적용된다.


:
Posted by 유쾌한순례자
2010. 12. 12. 02:08

static 멤버 클래스를 많이 사용하자 Study/Java2010. 12. 12. 02:08

중첩클래스는 다른 클래스 내부에 정의된 클래스이다. (외곽 클래스를 지원하는 목적으로 존재함)

네 가지 종류가 있는데 static 멤버 클래스 , static이 아닌 멤버 클래스 (인스턴스 클래스), 익명 클래스, 지역 클래스이다.

static 멤버 클래스는 다른 클래스의 내부의 선언되어 있고 외곽 클래스의 모든 멤버들(private으로 선언된 것까지)을 사용.

ex)
public class innerClassTest {
static class staticTest{
private static int a = 10;
}
public static void main(String args[]){
System.out.println(staticTest.a);
}
}

결과값 : 10

인스턴스 클래스의 각 인스턴스는 자신을 포함하는 외곽 클래스의 인스턴스와 은연 중 연관되는데

static이 아닌 멤버 클랫의 인스턴스 메소드 내부에서 외곽 클래스의 인스턴스 메소드를 호출하거나,

또는 this 키워드를 사용해서 외곽 클래스의 인스턴스에 대한 참조를 얻을 수 있다.

ex)
public class innerClassTest {
private int b = 20;
static class staticTest{
private static int a = 10;
int c = b;  //오류가 남.
}
class instancetest{
int d = b; //정상실행
}
public static void main(String args[]){
System.out.println(staticTest.a);
}
}
※ 외곽 클래스의 인스턴스를 사용할 필요가 없는 멤버 클래스를 선언한다면, 항상 static 멤버 클래스로 만들자.
-->Why?) static을 생략시 각 인스턴스가 외곽 클래스의 인스턴스 참조를 갖게 되며 이러한 참조 저장은 시간과 메모리가 
               소요 되며, 가비지 컬렉션 대상이 될 외곽 클래스의 인스턴스가 메모리에 계속 남아 있게 된다.

익명 클래스는 선언된 곳에서만 인스턴스를 생성할 수 있으며 instanceof 연산자로 타입 검사를 할 수 없다.

또한 하나의 익명 클래스에 여러 개의 인터페이스를 구현하기 위해 선언 할 수 없으며

오로지 단 하나의 클래스를 상속받거나 단 하나의 인터페이스만을 구현 할 수 있다.

지역 클래스는 가장 적게 사용되며 지역 변수가 설정 될 수 있는 곳{} 으로 둘러 쌓인 메소드나 블록이면 이면 어디든 선언!
:
Posted by 유쾌한순례자
태그 클래스를 클래스 계층으로 변환하려면 태그 값에 따라 달라지는 각 메소드를 추상 메소드로 만들고

추상클래스를 정의한다.

태그 값에 관계없이 동작하는 메소드 는 추상 클래스에 포함한다.

만일 모든 종류의 인스턴스들이 사용하는 필드들이 있다면 그것들도 추상클래스에 넣자.

:
Posted by 유쾌한순례자