관리 메뉴

쿰뱅이

자바정의3 본문

자바/JAVA 입문

자바정의3

주년 2011. 10. 11. 14:10
반응형

자바정의3

1. 모든 클래스는 자동적으로 java.lang.object를 상속한다.

특히, extends 키워드가 없을 때는 자동으로 extends Object가 추가된다.

 

2. 오버로딩: 한 클래스 내에서 메쏘드 이름은 같지만 아규먼트의 개수나 타입이 다른 메쏘드들을 만드는 것이다.

 

3. 오버라이딩: 상속 관계에 있는 하위클래스에서 메쏘드의 역할을 변경하거나 확장할 필요가 있을 때, 상속받은 메쏘드를 새로 정의하는 것이다.

 

4. 자식 클래스 객체는 부모의 멤버를 물려받아 사용하며, 접근 제한자로 제한을 둘 수 있다.

접근제한자가 private이면 한 클래스내에서만 사용할 수 있다. 이 때는 상속관계라 해도 부모의 멤버를 자식이 사용할 없다. 사용하려면 public 메쏘드를 이용하여 부모의 멤버를 얻는다. 이것이 은닉화이다.

 

5. 참조타입의 비교는 equals, 기본타입의 비교는 == 로 한다. equals는 해쉬코드를 비교하고, ==는 레퍼런스 값을 비교한다. String의 실제 문자열은 String pool에 존재하며, 물자열이 같다면 동일한 해쉬코드를 가진다.

예]                                   [reference]         [hashcode]

      String s1 = "june";        1001                    64545

      String s2 = "june";        1001                    64545

      String s3 = "july";         1005                    64549

String 리터럴(위의 예 참고)은 문자열이 같다면 동일한 참조코드와 해쉬코드를 가진다. 고로 같은 문자열은 한번만 생성한다.

String 객체는 이뮤터블하며 final 클래스이므로 더이상 상속할 수 없다.

 

6. System.in.read()는 문자를 읽어들인다.

문자는 읽어들인 다음, enter key를 치면 문자 뒤쪽으로 이스케이프 문자(\n\r)가 붙는다.

\n: 한 줄 아래 이동한 다음, 맨 앞으로 이동

\r: 현재 줄의 맨앞으로 이동

 

7. 숫자의 비밀

1부터 100까지의 합: 1+100, 2+99.....=> 50*101 = 5050

 

8. 달력

Date d1 = new Date();

d1.toString(); // today

 

Calendar cal = Calendar.getInstance();

cal.toStirng(); //today

cal.get(Calendar.Year);

cal.get(Calendar.Month)+1; 

cal.get(Calendar.Date);

 

9. 마방진이란 대각선, 수직선, 혹은 수평선의 합이 같은 것을 의미한다.

3*3배열에서 대각선, 수직선, 혹은 수평선의 합은 15가 된다.

 

10. 최대공약수는 공통약수 중 가장 큰 수이다.

최소공배수는 공통배수 중 가장 작은 수 이다.

예] 15, 80에 대해

15의 약수는 1,3,5,15이고

80의 약수는 1,2.....80

15의 배수는 15, 15*2...

80의 배수는 80, 80*2... 이다.

 

11. 재귀메쏘드: 메쏘드 안에서 같은 메쏘드를 다시 호출하는 것이다.

 

12. oop(객체지향프로그래밍)의 3대 개념

-은닉화

-상속성

-다형성: 오버로딩, 오버라이딩

 

13. 클래스 내에서는 생성자의 아규먼트나 메쏘드의 아규먼트와 멤버필드의 이름이 같다면 해당 아규먼트로 인식한다. 이를 방지하려고, 아규먼트와 멤버를 구분하는 this.을 사용한다. 클래스 내부에서 this.은 멤버(멤버필드나 멤버메쏘드)를 의미한다.

그리고, 클래스 내부에서는 자기 생성자를 생성할 수 없으므로, this() 생성자를 사용한다.

상속시, 자식은 부모의 멤버를 물려받지만, 생성자는 물려받지 않는다. 이미 만들어진 자신의 생성자를 이용하여 자신의 멤버필드를 초기화하려면 this()생성자를 사용하고, 자신의 생성자 안에서 부모의 멤버 필드를 초기화하려면 super()생성자를 사용한다.

자식클래스의 생성자 안에서 부모 클래스의 멤버 필드를 초기화 하려면 생성자를 호출해야 하지만, 생성자 안에서 생성자를 호출할 수 없으므로, 부모를 나타내는 super키워드를 이용한다.

생성자의 첫째줄에는 this()생성자나 super()생성자 중 하나만 있어야 한다. 또한, 다른 코드가 this나 super생성자보다 먼저 올 수는 없다.

자식클래스의 생성자에 this() 생성자가 없다면 첫번째 줄에 자동으로 super() 생성자가 추가된다.

자식클래스에서 자신에게 없는 메쏘드를 호출하면, super.메쏘드와 같이 부모의 멤버를 의미하는 super.이 자동으로 붙는다.

모든 클래스에는 생성자가 있고, 없더라도 기본 생성자가 자동으로 붙는다.

 

14. 패키지

1] 형태: package com.a.one;

2] 패키지는 클래스를 관련성에 따라 분류하여 편리한 재사용성과 은닉화를 한층 강화한다.

자바에서 패키지는 물리적인 디렉토리이다.

접근 제한자와도 밀접한 관계가 있다.

타 패키지 접근시 import com.a.one.*;을 이용한다.

3] 접근지정자(Acess Modifier)

-private(-): 클래스 내부에서만 사용

-protected(#): 상속관계의 두 클래스에서는 public처럼, 상속관계가 아닌 두 클래스에서는 기본접근 제한자로 쓰인다.

-public(+): import만 해주면 모든 곳에서 사용가능하다.

-기본접근제한자(default, 제한자가 안붙는 경우임): 같은 클래스나 같은 패키지에서만 접근할 수 있다.

4] 패키지를 선언하지 않은 메인 클래스(메인메쏘드를 가진 클래스)는 같은 위치에 있는 소스를 먼저 검색하므로 클래스 명을 제외한 com.a.*;로 명시할 경우 에러가 날 수 있다. 자바까지 명시한 풀 패키지명으로 읽어들이지 않고, 단지 자바명으로만 읽어들인다. 항상 메인클래스 쪽은 import문을 자바명까지 명시된 풀패키지명을 사용한다.

 

5] 패키지 컴파일은 javac -d . 형식을 쓴다. .은 현재 위치를 가리킨다.

-d 디렉토리 : 패키지의 경로대로 컴파일 한다.

-cp classpath : 클래스패스를 지정한다.

예]

* javac -d . a.java  //현재 디렉토리에서 패키지 컴파일

* javac main.java  // 현재 위치에서 컴파일

* javac -d . *.java  //전체 패키지 컴파일

* java main            //실행

* javac -d c:\a c:\b\a.java  //c:\a에 컴파일

* java -cp c:\a main //c:\a에 컴파일

* javac -d  /usr/local/tomcat/webapps/project/WEB-INF/classes/

* -cp  /usr/local/tomcat/webapps/project/WEB-INF/classes/ TEST.java

///해당 클래스 패스가 잡힌 자바를 usr/local/tomcat/webapps/project/WEB-INF/classes/에 패키지 컴파일 해라.

반응형