달력

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. 3. 19. 20:23

오버로딩 vs 오버라이딩 Study/Java2011. 3. 19. 20:23

오버로딩  : 새롭게 정의
오버라이딩 : 상속받은 메소드 변경


오버로딩은  메소드 이름은 같게, 매개변수는 다르게, 리턴타입은 상관없음.
오버라이딩은 메소드 이름이 같고 매게변수도 같고 리턴타입도 같고.


class A {
    
    void test(){}


class B extends A{ 
     void test(){} //오버라이딩
     void test(String str, int i){}//오버로딩

'Study > Java' 카테고리의 다른 글

캡슐화  (0) 2011.03.20
final  (0) 2011.03.20
static 메소드  (0) 2011.03.19
JVM 메모리 구조.  (0) 2011.03.19
변수의 종류  (0) 2011.03.19
자바가 C언어 보다 느린 이유  (0) 2011.02.24
[면접정리]AOP  (0) 2011.01.26
[면접정리]동기화를 자주 사용시 (쓸때없이 사용시)  (0) 2011.01.26
[면접정리]Beans Pattern의 문제점  (0) 2011.01.26
[면접정리]SQL INJECTION 방어법  (0) 2011.01.26
:
Posted by 유쾌한순례자
2011. 2. 24. 14:25

자바가 C언어 보다 느린 이유 Study/Java2011. 2. 24. 14:25

자바는 반만 컴파일 되고 반은 실행시에 해석(Interpret)이 되기 때문에 느리다. 

※ JIT , HOTspot 등으로 격차가 많이 줄어들고 있는 상태다.

'Study > Java' 카테고리의 다른 글

final  (0) 2011.03.20
static 메소드  (0) 2011.03.19
JVM 메모리 구조.  (0) 2011.03.19
변수의 종류  (0) 2011.03.19
오버로딩 vs 오버라이딩  (0) 2011.03.19
[면접정리]AOP  (0) 2011.01.26
[면접정리]동기화를 자주 사용시 (쓸때없이 사용시)  (0) 2011.01.26
[면접정리]Beans Pattern의 문제점  (0) 2011.01.26
[면접정리]SQL INJECTION 방어법  (0) 2011.01.26
[면접정리]Garbage Collection  (0) 2011.01.25
:
Posted by 유쾌한순례자
2011. 1. 26. 00:28

[면접정리]AOP Study/Java2011. 1. 26. 00:28

http://www.zdnet.co.kr/news/news_view.asp?artice_id=00000039147106&type=det

간단하게 말하면 횡단관심사를 분리하자는 것!
:
Posted by 유쾌한순례자
성능에 영향을 끼친다.

'Study > Java' 카테고리의 다른 글

JVM 메모리 구조.  (0) 2011.03.19
변수의 종류  (0) 2011.03.19
오버로딩 vs 오버라이딩  (0) 2011.03.19
자바가 C언어 보다 느린 이유  (0) 2011.02.24
[면접정리]AOP  (0) 2011.01.26
[면접정리]Beans Pattern의 문제점  (0) 2011.01.26
[면접정리]SQL INJECTION 방어법  (0) 2011.01.26
[면접정리]Garbage Collection  (0) 2011.01.25
[면접정리]객체지향에 대해서 설명  (0) 2011.01.25
제네릭스 (Generics) <발행 No. 공개 No.>  (0) 2010.12.13
:
Posted by 유쾌한순례자
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 유쾌한순례자
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 유쾌한순례자