'JAVA'에 해당되는 글 7건

  1. 2010/09/03 java 시험 관련
  2. 2010/09/03 16장
  3. 2010/09/02 15장 스레드
  4. 2010/08/31 자바 11장(예외처리)
  5. 2010/08/31 자바 10장
  6. 2010/08/23 자바용어 2
  7. 2010/08/23 JAVA 기본 용어..1
2010/09/03 11:29

객체지향 속성,자바속성
데이터 타입 선언, 연산자 사용법, 조건문 반복문,
객체, 클래스, 상속,오버라이딩, 다형성, 인터페이스, 추상클래스,
쓰레드, 셉션?,,자료구조, 예외처리


출제의도는 각 부분에 대해서 기본적인 것
자바와 객체지향 특성
변수 선언
선언한 변수 제대로 쓸줄 아는지
연산을 했을때 적절한 결과를 예측 가능 한지..
연산 과정에서어떻게 처리 되니깐 어떻게 할당되고..머 이런거 알고 있는지
연산자 사용법 제대로 알고 있는지
스트링 문자열을 제대로 쓸줄 아는지,,결합,,
배열 선언을 제대로 선언하고 사용 하는지
반복 접근문, 제대로 이해 하는지
어떤 상황을 주고 클래스 선언 제대로 할줄 아는지..
생성자, 오버라이딩, 상속, 생성자 쓰는 방법, 오버로딩 이건 섞어 져서 나온다. 꼼꼼하게 봐서 체크 한다.
함정도 있다. 빠지지 말자.
접근 제한에 대한 것도 언뜻 포함
쓰레드 예외처리 자료 구조는 정말로 기본 적인 것
쓰레드는 어떤 개념으로 쓰레드가 만들어 졌나..그러나 주의해야 할점
예외 처리는 어떤 개념에서 이뤄지고 어떤것은 주의 해야 한다.
자료 구조도 일반적인 내용에 간단한 사용법
예시는 4~8개 정도 나가고 모두 골라라
답이 몇개인지는 알려주자는 알려 준다..ㅎㅎ다행..ㅎㅎ
예시를 보고 답하는게 많다.
주관식 3개, 단답형
나머지 객관식
기본,,쉽게 넘어 가는거 보고, 당연하다는 것도 나오고..
쳅터 별로 한문제랑 두문제
객체랑 다형성은 문제가 좀 많다. ??
클래스 이름 사용법은 안낸다..API참조 하는건 외우지 않아도 된다.

저작자 표시 비영리

'JAVA' 카테고리의 다른 글

java 시험 관련  (0) 2010/09/03
16장  (0) 2010/09/03
15장 스레드  (0) 2010/09/02
자바 11장(예외처리)  (0) 2010/08/31
자바 10장  (0) 2010/08/31
자바용어 2  (0) 2010/08/23
Posted by 고고씽 고고씨잉
2010/09/03 10:06

자료를 저장하는 방식 대표적인거
List
-(1차원으로,sequence(열),중복가능)
Set
-중복자료를 넣을 수 없다 .
Map
<key,value>를 쌍으로 집어 넣어서 key로 자료를 찾는다.
일반적으로 key값은 String으로 많이 쓴다. 


List 와 Set은 collection 인터페이스에서 상속을 받는다.
모두다 인터페이스 타입 이다.
 그래서 모두 다 구현해야 한다.
Map은
592페이지 참조

ArrayList에 만약에 Dog를 넣으면 object타입으로 들어 간다.
내올때도 object타입으로 나온다. 그래서 (Dog)으로 캐스팅해서 쓴다.
이러면 불편해서
ArrayList<Dog>으로 타입으로 바로 넣을 수 있게 한다.
그래서 나올때도 Dog타입으로 나온다.
이런게 제네릭이다.
제네릭 선언방법(578p)
이런거 할일은 거의없지만 api에 써있어서 읽을줄은 알아야 한다.
E에 Dog로 쓰면 E에있는건 다 Dog로 바뀐다. (의미만 기억해도 된다)


ArrayList 원소 정렬하기
-정렬 메소드 찾아보기
-하지만 정렬메소드가 없다..ArrayList에는

Collection.sort()메소드
-이걸 사용하면 알파벳순으로 정렬을 할 수 있다.
-하지만 String 객체가 아닌, 다른 복잡한 객체로 구성된 리스트는 어떻게 정렬 할까요?
sort()에인자를 넣어서 comparable을 확장한 것이어야 한다. 

sort()에서는 comparable에있는 compareTo()메소드를 찾아서 정렬 해준다. 
String 객체는 자동으로 있지만 다른것은 없다. 

 
package test3.student;

import java.util.ArrayList;
import java.util.Collections;

public class SortTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  ArrayList<Employee> lists=new ArrayList<Employee>();
  
  Employee emp1= new Employee("af", 15);
  Employee emp2 = new Employee("1213",18);
  Employee emp3 = new Employee("adas",9);
  
  lists.add(emp1);
  lists.add(emp2);
  lists.add(emp3);
  
  Collections.sort(lists);
  ArrayList<String> list2 = new ArrayList<String>();
  list2.add("fault");
  list2.add("add");
  list2.add("ddd");
  
  }

}

class Employee implements Comparable {
 public String getName() {
  return name;
 }
 public int getAge() {
  return age;
 }
 Employee(String name, int age){
  super();
  this.name= name;
  this.age = age;
 }
 public void setName(String name) {
  this.name = name;
 }
 public void setAge(int age) {
  this.age = age;
 }
 
 String name;
 int age;
 
 @Override
 public int compareTo(Object arg0) {
  
  return this.name.compareTo(((Employee)arg0).getName());
 }

 
 
}

제네릭과 형안정성
제네릭을 사용하지 않으면
-object 타입으로 들어가서 모든 이상한게 다 들어간다
제네릭을 사용하면
-<fish>로 하면 fish만 들어가고 나올때도 fish로 나온다.
-형 안정성이 확보된다.

제네릭 사용법
제네릭을 사용하는 클래스
-new ArrayList<Song>()
-List<Song> songLIst=new ArrayList<Song>()



ArrayList<Dog>  , ArrayList<Animal>은
다형성과 상관없이 완전히 다른 타입이다.
Animal에 Dog이들어갈 수 없다.
이거 무조건 pdf 16장 7p꼭 봐라..들어 갈 수도 있다.
< T extends Comparable<? super T>>
     하위범위                      상위범위


comparator를 사용하면 comparable을 구현하지 않는 클래스를 정렬 할 수 있다. 
비교자 클래스를 만들어 주는 것
구현하는 것은 pdf 참조

정렬을 하고싶으면 객체 스스로 비교 할 수 있고(comparable)compareTo()
비교를 해주는 것이 있다(comparator)compare()
두가지 방법이 있다. 
 
List
-인덱스 제공
-Listlterator를 줄 수 있음
-ArrayList(상당히 빠르고 크기를 마음대로 조절, 초강력 배열)
-Vector(요즘대부분 안씀, ArrayList의 구형 버젼)
-LinkedList(스택,큐,양방향큐, 원소를 쉽게 제거 할수 있음)

Set
-중복된 항목이 들어가는 것을 방지함
-equals() 메소드를 이용하여 중복 확인
-HashSet (가장빠른임의접근속도, 순서를전혀예측할수없음)
-LinkedHashSet (추가된순서, 또는가장최근에접근한순서대로접근가능)
-TreeSet (정렬된순서대로보관. 정렬방법을지정할수있음)

Map
-키와 값을 대응시키는기능을 제공
-키와 값은 모두 객체여야만 함
HashMap  가장빠른임의접근기능을제공
HashtableHahsMap  의구형버전
LinkedHashMap  LinkedHashSet과유사. 입력된순서또는가장최근에접근된순서대로보관
TreeMap 정렬된순서대로유지하기에좋음


객체가 같은지 확인하는 방법
객체 동치
-equal()메소드에 대해 true가 리턴되는 것
-똑같은 객체를 참조해야 하는 것은 아님
레퍼런스 동치
-두 레퍼런스가 같은 객체를 참조하는 경우
- a==b가 참이 되어야 함


어떤조건에서두객체가같다고인정할수있을지결정한다음equals() 메소드를오버라이드이때
hashCode() 메소드도반드시오버라이드해야함


Comparable인터페이스 구현해봐라 compareTo()메소드까지 해줘야 한다. 객체 스스로 
Comparator를 써서 비교할 수 있다. 다른 객체끼리 비교
중요 주용 중요 중요 중요 중요 중요 중요 중요
api함 봐바
유틸에서

여기에서 사용방법은 당연히 알고 있어야 한다. 또한 제대로 쓸려면 그거에 맞는 클래스를 쓸 줄 알아야 한다.
제대로된 기능을 활용 할 줄 알아야 한다.

저작자 표시 비영리

'JAVA' 카테고리의 다른 글

java 시험 관련  (0) 2010/09/03
16장  (0) 2010/09/03
15장 스레드  (0) 2010/09/02
자바 11장(예외처리)  (0) 2010/08/31
자바 10장  (0) 2010/08/31
자바용어 2  (0) 2010/08/23
Posted by 고고씽 고고씨잉
2010/09/02 16:03

스레드가 먼가를 아는가가 중요 하다.

컴퓨터는 원래 하나만 처리 할 수 있으나 여러개가 처리하는 것처럼 보이도록 사기치는것

이렇게 만들기 위해서는
 Thread라는 클래스가 있다.
메인 메소드를 제외하고 가장 최초로 호출되는 메소드는 run()이라는 메소드이다.
인터페이스로 Runable 을 구현한다음에 Thread한테 인자를 넘겨 준다.

멀티스레딩
-다른 작업은 방해하지 않으면서 동시에 메시디를 불러오는 작업을 할 수 있어야 한다.
-스레드르 여러개 만들어서 여러개의 작업을 거의 동시에 수행할수 있도록 하면 된다.
자바에서의 멀티스레딩
-자바api에 들어있는 Thread클래스 사용
-java.lang.Thread
    Thread t = new Thread();
    t.start();

스레드
-하나의 cup에서 여러 작업을 동시에 돌리는 것을 멀티스레딩이라고 한다.
-멀티태스킹과 달리 환경의 대부분을 공유함
-각 스레드마다 하나씩의 호출 스택이 있음


멀티스레딩과 호출 스택
1.JVM에서 main()메소드호출
2.main()에서 새로운 스레드 시작
3.두 스레드가 종료될 때까지 새 스레드와 원래 스레드 사이를 왔다갔다함


새로운 스레드를 시작하는 방법
1.Runnable 객체 만들기
- Runnalbe threadjob = new MyRunnable();
2.Thread객체를 만들고 그 객체에 Runnable객체전달
Thead myThread = new Thead(threadjob);
3.Thread 객체의start() 메소드호출
myThread.start();

run()메소드
메소드Thread 객체== 일꾼
Runnable 객체== 일꾼이할일
run() 메소드
-public void run() {
--// 새로운스레드에서실행시킬코드
--}
Runnable 객체를Thread 생성자에젂달하는것은Thread에run() 메소드를구하는방법을알려주는것이라고할수있습니다.


스레드 스케줄러
-스레드의 상태를 관리함
-사용자 마음대로 제어할 수 없음
-스케줄링과 관련하여 어떤 것도 확실하게 단언할 수 없음
-스케줄러가 어떤 특별한 방식으로 작동할 것 을 가정하고 프로그램을 만들면 절대 안됨
왜냐!!!(스케줄러의 불확정석 때문이다. )머가 먼저 되고 머가 나중에 되고 하면 안된다.

 
Thread.sleep()메소드
-스레드를 대기 상태로 보내주는 메소드
-대기상태에서 벗어난 스레드는 항상 실행 가능한 상태로 돌아감

     Thread.sleep(2000);           //2초간 실행을 죽인다.
-이 메소드를 적당히 활용하면 각 스레드에서 공평하게 순번을 할당 받도록 해줄 수 잇다.

여러 개의 스레드


병행성 문제
단점이 있다
-두개 이상의 스레드가 어떤 객체에 있는 하나의 데이터에 접근하게 되는 경우
-서로 다른 두 스택에서 실행되는 메소드가 객체에 있는 동일한 객체에 대한 게터 또는 세터 메소드를 호출하게 되는 경우

synchronized키워드(동기화)
-어떤메소드를 한 번에 스레드만 접근할 수 있도록 만들 때는 synchronizedㄹ라를 키워드를 쓰면 된다.
-싱크로 어쩌구 키워드는 그동기화된 코드에 접근하려면 스레드가 열쇠를 가지고 있어야 한다는 것을 의미



객체의 락
-모든 객체에는 락이 있는데, 동기화된 메소드가 있을 때만 그 락이 작동합니다.
-객체에 하나 이상의 동기화된 모세드가 있으면 그 객체의 락에 맞는 열쇠를 가지고 있는 스레드만 동기화된 메소드를 호출할 수 있다.
-어떤스레드에서동기화된메소드를호출하게되면우선열쇠를찾습니다. 열쇠가있으면열쇠로락을잠그고들어가서작업이끝날때까지그열쇠를젃대내주지않습니다.
-그스레드가열쇠를돌려놓기젂까지는다른스레드에서젃대그객체의동기화된메소드를쓸수없습니다.

동기화도 완벽한게 아니라 단점이 있다.
-과부화가 있다.
-어느 한쪽이 일을 끝마칠 때 까지 한쪽은 기다리고 있어야 한다.


요약:
스레드는 Thread와 Runnable이 필요 하다.
동기화(synchronized)
스케쥴러는 예측 못하고 지 맘대로 일을 한다.
sleep이라는 메소드를 써서 단계적으로 이용 가능하지만..안전하지는 않다. 별로..머..




저작자 표시 비영리

'JAVA' 카테고리의 다른 글

java 시험 관련  (0) 2010/09/03
16장  (0) 2010/09/03
15장 스레드  (0) 2010/09/02
자바 11장(예외처리)  (0) 2010/08/31
자바 10장  (0) 2010/08/31
자바용어 2  (0) 2010/08/23
Posted by 고고씽 고고씨잉
2010/08/31 17:41

예상치 못한 상황
-파일이 없는 경우
-서버가 다운되는 경우
-장치를 사요할 수 없는 경우

이런 예외적인 상황을 처리하기 위한 방법
-자바의 예외 처리 메커니즘
-try/catch블록
-예외선언
예외 상황에 대비해라

내가 사용할려고 하는 메소드가 Exception의 throws를 한다고 하면 반드시 try catch를 사용 해야 한다.

try/catch블록
-예외를 처리할 것임을 알려주기 위한 용도로 쓰임


확인예외
코드에서 예외를 던진다면 반드시 메소드를 선언하는 부분에서.............



우리가 exception쓰는건 외부의 예외적인 상황을 위하여 하는거지 코드가 잘못되서 작성하는건 아니다.

무조건 실행할 내용
-예외 발생 여부와 상관없이 무조건 실행할 코드는 finally블록에 써준다.


try {
turnOvenOn();
x.bake();
} catch (BakingException ex) {
ex.printStackTrace();
} finally {
turnOvenOff();
}

예외를 두개 쓸 수 있다..각각 잡아 줄 수 있다(고급 세탁기)


상속계층 위아래로 있는건 맨 마지막에 써줘야 한다..가장 일반적인걸로
같은 계층은 순서가 없다.

여러 개의 catch블폭을 쓸때는 상/하위클래스 관계를 잘 따져봐야 한다.


try/catch를 하나 하나 다 처리해주면 나중에 코드를 고칠때 힘들다.
그래서 throws로 미뤄 놓으면 나중에 한꺼번에 처리해줄 수 있다.
넘겨 주고 넘겨주고 마지막에 메인에서 처리해주면 끝~


중요한거..
예외와 관련된 규칙
1.try 없이 catch나 finaill만 쓸 수 없음


3.try뒤에는 catch나 finally가 있어야 함

4.try 뒤에 finally만 있으면 예외 선언 생략(나중에 묶어서 처리하기 위함)



try/catch를 어떻게 해주는거냐
예외가 있는 메소드를 사용하면 저걸 사용하던가 던지던가

여러 예외가 있을 경우 작은것 부터 처리..
저작자 표시 비영리

'JAVA' 카테고리의 다른 글

16장  (0) 2010/09/03
15장 스레드  (0) 2010/09/02
자바 11장(예외처리)  (0) 2010/08/31
자바 10장  (0) 2010/08/31
자바용어 2  (0) 2010/08/23
JAVA 기본 용어..1  (0) 2010/08/23
Posted by 고고씽 고고씨잉
2010/08/31 15:41
여기 범위에서 한문제나 두문제 나온다.

10-11-14-15-16
11장,15에 쓰레드, 12에 예외
int     boxing ->   integer                   autoboxing
      <--unboxing 
11장
예외처리(Exception handling)
코딩을 아무리 잘해도 문제가 생길 수 있다.

더보기


일반 메소드..알지??

더보기


더보기


더보기

더보기

정적 변수 초기화
-초기화시기
--초기화 시키 클래스가 로딩될때

두가지 규칙
-객체가 생성되기 전에 초기화됨
-정적 메소드가 실행되기 전에 초기화됨

상수
(static final변수)==상수
-변하지 않는 값을 정해줄 수 있다. 예)PI=3.41
-변수명은 대문자로 해준다. 단어 두개면 _ 로 해준다.

정적초기화부분
-final값은 반드시 초기화 시켜줘야 한다.
-선언과 동시에 해 줄수도 있고
-밑에 처럼 선언만 한다음 초기화 해 줄 수있다.
- final static int x;
  static{
           x=42;
          }


final
-번수를 final로 하면 그 값을 바꿀 수 없음
-메소드를 final로 지정하면 오버라이드 할 수 없음
-클래스를 final로 지정하면 확장 할 수 없음
왜 final로 하냐면 보안 문제 때문이다. 대표적으로 string 클래스 이다..



래퍼(wrapper) 클래스

int i = 288;
Integer iWrap = new Integer(i);

5.0이전 버젼은 이상해..ㅎㅎ지원이 안되지만..이상부터 지원..ㅎㅎ오토박싱이 된다.
arraylist는 객체 타입만 담긴다.
그런데 int를 그냥 담으면 안되기 때문에 래퍼를 쓴다.

오토박싱은??
원시유형 <--> 래퍼 객체 변환을 자동으로 처리

스트링을 정수형으로 바꿀때
String s = “2”;
int x = Integer.parseInt(s);
double d = Double.parseDouble(“420.24”);

수를 스트링으로 바꿀때
double d = 42.5;
String doubleString = Double.toString(d);

포매팅
API를 봐라
Calendar 객체생성법
Calendar cal = new Calendar();
에러!!!
Calendar cal = Calendar.getInstance();

날짜는 date보다는 calendar를 쓴다.



import static 구문
-자바 5.0에서 새로 추가된 문법
-정적 클래스나 정적 변수, 열거형을 쓸때 import static구문을 쓸 수 있음
-코드를 일기가 힘들어질 수있으므로 주의!!



저작자 표시 비영리

'JAVA' 카테고리의 다른 글

16장  (0) 2010/09/03
15장 스레드  (0) 2010/09/02
자바 11장(예외처리)  (0) 2010/08/31
자바 10장  (0) 2010/08/31
자바용어 2  (0) 2010/08/23
JAVA 기본 용어..1  (0) 2010/08/23
Posted by 고고씽 고고씨잉
2010/08/23 17:04

1.

자바특징:(추상화,상속성,다형성)

캡슐화와 데이터 은닉(private, 게터,세터)

다형성/메서드 오버로딩

           상속성(private와 생성자는 상속을 못받는다.)

           생성자도 여러 개 생성 가능(매개 변수를 변형시켜서)…

 

자바는 어떤식으로 돌아가는가?

           JVM이 읽을 수 있게 작성된게 classfile이다.

JVM에서는 클래스파일이 있는가 확인 후 각각의 클래스를 메모리에 전부다 저장을 해 놓는다. 그리고 순서에 의해 처리 한다.

static

온전한 단어 다 써서 메소드 이름을 만든다.(처음 보는사람도 대충 알 수 있게)

 

클래스

           속성과, 행위를 나타낸다.

           인스턴스 변수(속성), 인스턴스 메소드(행위)

객체지향 코드

           반복된 메소드를 담아 놓아서..상속 시키면 관리가 편하다.

           상위 클래스 메소드가 맘에 안들면 오버라이드 해서 쓸 수 있다.

           상위클래스, 하위 클래스

 

클래스와 객체 사이

           클래스는 정의만 해 놓은 것이고, 객체는 실제로 쓰는 것을 말한다.

           클래스는 메모리에 다 올려 놓고 필요 한 것만 가져다 쓴다.

           Dog d = new Dog(); 이건 생성자를 먼저 호출 한 것이다.

           생성자를 안만들어줬을 때 생성자는 알아서 default생성자를 만들어 주고

생성자는 클래스를 활용 하기전 변수들을 초기화 하거나 그런 준비 과정을 위해 사용 한다.

가비지 콜렉션

           자바는 메모리 수거도 알아서 해준다.

           객체는 힙 영역에 저장 된다. 연결이 끈어지면 알아서 싹 지워진다.

변수 선언

           정수형,실수형,논리형,문자형

           연관된 값을 표현할 때 연달아 쓸 수 있다.

           final은 값이 변화하지 않도록 해준다.

           Final을 클래스에 쓰면 상속이 안된다. 변수는 값이 변화하지 않는다. 각각 틀림

 

 

객체 레퍼런스

           실제 힙에 있는 어떤 객체를 가리키게된다.

           원시 변수 = 실제 값을 나타내는 변수

           객체 레퍼런스 = 객체에 접근하는 방법을 알려주는 비트(주소가 들어 있음, 포인터)

           레퍼런스는 단 하나의 객체를 가리킨다.

 

 

4

매개변수와 인자

           둘은 동일한 말이지만 관점에서 따라 말이 달라짐

           메소드 안에서는 매개변수, 어디서 넘겨주는 것은 인자

          

           Int add(int a, int b){}      

           리턴타입  메소드명(타입 변수이름, 타입 변수이름){}

          

자바에서는 값으로 전달합니다. 즉 복사본을 전달합니다.

 

캡슐화와 데이터 은닉

           캡슐화는 인스턴스 변수를 private로 하고, 세터 게터로 받고 넘겨주고 한다.

           직접 변수에 접근을 막아 준다.

 

인스턴스 변수의 초기화

           생성자가 호출되면서 초기화 되고, 정수는 0, 부동소수 0.0, 부울 false, 문자 = null

 

 

인스턴스 변수와 지역 변수

           인스턴스 전체, 지역변수 메소드내의 변수

           지역변수는 초기화가 되지 않는다..초기화 시켜줘야 한다.

 

레퍼런스 변수

레퍼런스 변수에서 ==은 동일한 객체를 가리키는 것이냐라고 말한다.

인스턴스 변수에서 == 은 값이 같냐 이다..

String 클래스는 equals();메소드를 사용한다.

그러나 String클래스가 아닌 다른 클래스의 equals()메소드는 ==와 같은 말이다..

String 클래스는 재정의를 해서 동일한 인스턴스주소가 아닌 그 속의 값이 같냐 라고 재정의 했다.

 

상속

 

           상위클래스에서하위클래스로 상속을 해주고 extends(확장)이라고해준다

           하위클래스는 메소드를 오버라이드 할 수 있다.

하위클래스에서 메소드를 오버라이드 해주면 상위클래스와 하위클래스 중 가장 최신으로 작성한 하위클래스의 메소드를 JVM이 알아서 호출해준다.

          

상속 과 다형성

           코드의 중복을 막을 수 있다.

           다형성을 이용 할 수 있다..가장 강력한 이유

           Animal  a = new Dog();

           Animal  b = new Cat();

           For 문으로 한꺼번에 처리 할 수 있다..

           인자와 리턴타입도 가능하다.

           Animal add(Animal a);

           이런식으로 다형성을 이용하여 받을 수 있다.

 

           add(a),add(b);

 

오버라이드

           재정의

           인자는 똑같아야 하고, 리턴 유형은 호환 가능해야 한다.

 

오버로딩

           중복, 리턴 유형이 달라도 된다.

생성자

           안만들었으면 컴파일러가자동으로 만들어 주지만

           하나라도 만들어 줬으면 자동으로 만들어주지 않는다.

           초기화 작업이 필요 하거나 객체를 사용자가 쓰기 전에 필요한 준비작업

생성자 연쇄

           맨 처음 최상위 생성자가 호출되고, 그다음 밑에..밑에..밑에..이렇게 생성된다..차례대로..

           자신은 this.위계층은 super

 

별표,시험에 나온다 시험에 나온다.

5장에 16페이지 되나 안되나,,설명

ㅎㅎ

 

 

추상 클래스

           클래스 앞에 abstract달아주면 되고 인스턴스는 생성된다.

           new를 써서 자신을 받을 수는 없다.

           추상 메소드가 하나라도 있으면 무조건 추상 클래스이다.

           그냥 메소드도 만들 수 있다.

           확장하지 않으면 쓸모도 가치도 없다.

           다형성을 그대로 쓸 수 있다.

           배열 만들 수 있다.

          

추상 메소드

           반드시 오버라이드 해야 하는 메소드

           바디가 없는 메소드

           Public abstract void eat();

           이걸 가지고 있으면 반드시 추상 메소드가 되야 한다.

           만약에 구현을 안해주면 하위클래스로 넘길 수도 있다.

ArrayList<Object>

           <>안에 자신이 쓸 객체를 쓰면 그걸 배열로 쓸 수 있다.

 

다중상속은 자바에서 해결이 안된다.

하지만 인터페이스라는 것을 사용하여 다중상속과 같은 효과를 누릴 수 있다.

여러 개의 인터페이스를 받을 수 있다.

추상클래스와 비슷하다.

하지만 메소드는 추상메소드만 들어가야 한다.

인터 페이스끼리 확장(상속)??도 가능하다.

Public abstract 와 같은 메소드가 들어가야 한다.

 

Public intervface Pet{}

Public class Dog extends Animal implements Pet,Saveable,…{}

 

일반클래스:완전한 모습

추상클래스:추상메소드를 가지고 있는거, 구현된 메소드도 가질 수 있다.

인터페이스:무조건 추상메소드만 가진 것,, 상속트리에 관계 없이 어떤 역할을 하게 만들고 싶을때

'JAVA' 카테고리의 다른 글

16장  (0) 2010/09/03
15장 스레드  (0) 2010/09/02
자바 11장(예외처리)  (0) 2010/08/31
자바 10장  (0) 2010/08/31
자바용어 2  (0) 2010/08/23
JAVA 기본 용어..1  (0) 2010/08/23
Posted by 고고씽 고고씨잉
2010/08/23 16:59

변수란?

무언가를 임시로 담아 두기 위한 용도

예)int a = 10;
int형 a에 정수 10을 대입해준다. 
상수는 10이고 값이 바뀌지 않지만 
변수 a는 값이 변할 수 있다. 
 

원시변수

           인스턴트 변수, 지역 변수

           int, bool, float,double

 

객체 레퍼런스 = 객체에 대한 참조

 

원시 변수의 규칙:

  int    count;

(type)  변수이름

count = 10;
이런식으로 일단 변수에 대한 정의를 해주고 
그다음 다시 값을 대입해줄 수 있다. 
 

변수의 원시(기본) 유형:

 

(boolean),문자형(char(2)),정수형숫자(byte(1),short(2),기본형 : int(4),long(8)),
부동소숫점 소수(flaot(4),기본형 : double(8))

ex)

int x =24; int형의 x 24를 대입

byte b =x; byte b x를 넣으면 2바이트인 바이트형은 4바이트인 int형을 채울수 없으므로 에러

 

 

선언


정수형

int a = 123 , c = 455;

long b = 1124L; 여기서 long형은 대문자L을 뒤에 써줘야한다.

 정수 형의 기본은 int형이다.


부동소수점 소수

double a= 1.234E8;

float b = 1.234F , c = 1.222f; float형도 뒤에 f를 붙어줘야한다.

부동소수점의 기본형은 double 형이다.

값을 변하지 않도록 하기 위해서는 앞에
final을 붙여준다

final int FEET_PER_YARD =3; 변수명은 대분자로 해주고 그 사이는 _바를 이용한다.
이런식으로 써주는게 규칙이다.

변수에는 final이 상수 역할을 해줄 수 있게 하지만
객체의 경우에는 상속을 못하게 막아주는 역할을 한다.
 

객체 레퍼런스

객체 변수라는 것은 없음.

객체 레퍼런스 변수라는 것만 있음

객체 레퍼런스에 객체가 들어가는 것이 아닌 객체를 가리키는 주소가 있음


.(dot)을 이용하여 속성이나 메소드에 접근할수 있다

ex) Books  book    =    new Book();
           1번         3번      2번

1번)레퍼런스 변수 선언 --->2번) 객체 생성 --->3번 =으로 객체와 레퍼런스연결 

   
book.name = "asdf";

book.print();
이것이 Book()객체를 생성하여 book로 가리키게한다음 book이라는 레퍼런스 변수를 이용하여 Boo()객체속에 있는 변수에 값을 대입하는 것이다.


그림
16 참조

 

배열

원시 타입의 배열

int[] nums;

num =new int[3];

num[0] = 5;

num[1] = 4;

num[2] = 5;

배열은 0부터 시작 한다.

int형의 변수 3개를 생성
만약 배열의 경우

int[] array = {30,20,30,40};
이렇게 했을때 선언과 동시에 배열에 값을 대입해야 한다.

int[] array = new int[4];
array = {30,40,50,40};
이럴 경우 에러가 생기고 이렇게 해서도 안된다.
이거 명심하다..나 틀렸었다.

 

객체 레퍼런스에 대한 배열

Dog[] pet = new Dog[3];

여기서 바로

pet[0].name = "아야어여";

pet[1].name = "가나다라";

pet[2].name = "가갸거겨";

이렇게 하면 에러가 뜬다. 왜냐 하면

처음에 레퍼런스 변수만 선언을 하였기 때문이다.

 

Dog객체는 따로 만들어 줘야 한다..이렇게..

pet[0] = new Dog();

pet[1] = new Dog();

이런식으로..객체를 만들어 주고

pet[0].name = "아야어여";

이렇게 접근을 해야 한다.

 

 4

 

메소드에 뭔가를 보내기

 

메소드에서 사용하는 것은 매개변수, 호출하는 쪽에서 전달하는 것은 인자.

 

Dog d = new Dog();            //레퍼런스 변수d에 Dog()객체를 가리키게함
d.bark(3)                           //bark라는 메소드에 인자 3을 넘김

           인자              

 

----------------------------------
class Dog{

                    
매개 변수

void bark(int numOfBarks) {                        //여기서는 인자 3을 받음

           whlie (numOfBarks > 0 ) {                 //인자가 0보다 크면

           System.out.println("ruff");                 //ruff를 출력

           numOfBarks = numOfBarks -1;        //인자를 하나 빼서 다시 넣음

       }

   }

}

두개 있는 메소드를 호출하면서 인자 두개를 보낼 때
..

 

void go() {

           TestStuff t = new TestStuff();

           int x= 7;

           t.takeTwo(21,24);               //여기서 인자 두개를 보냈음

}

 

void takeTow(int x, int y) {            //매개변수가 2개 있으므로 인자 두개를 받음

 int z = x+y;                        //x=21,y=24가 대입된후 더한 값을 int z에 넣음

           System.out.println(z);        //z를 출력하면 45가 출력된다.

}

 

          

------------------------------------------------------

메소드에서 어떤 값을 돌려 주는 것

void go(){

}

리턴 형을 void로 선언했고 이 메소드는 아무것도 리턴 하지 않았다.
말그대로 void는 리턴이 없는 것이다.

 

공식

리턴형 메소드이름 (매개 변수){}

int giveSecret(){

           return 42;

}

리턴 형은 int형이고 정수인 42를 리턴해주었다.

만약에 42.3이라는 실수 형은 리턴 할 수 없다.
이렇게 할려면 리턴 형을 float이나 double 으로 해주어야 한다.

왜냐..int형은 정수형이기 때문에..
실수형은 float이나 double형이다.
ex)
double giveSecret(){

           return 42.3;

}
 

 

자바에서 값으로 전달합니다. , 복사본을 전달하는 것

Cal a = new Cal();

int x = 30;      //int형인 x에 상수 30을 대입
a.switch(x);    //인자 값으로 x를 보낸다..말그대로 30을 보낸다.

 

void switch(int z){       인자인 30을 받고

          z=0;                그것을 0으로 만들어주었다.

}
여기서 보면 인자로 x로 보내주었다고 해서 값 그대로 보내준 것이 아니라
x의 복사본을 보내준 것이다. 그래서 인자 x를 받아서 0으로 만들어주었어도
저 위에 있는 int x= 30;이 변하는 것은 아니다..
음..
머 예를 들어 체크카드를 만들려고 한다. 이때 주민등록증이 필요하다. 은행에서 그 주민등록증을 가져다가 쓰는게 아니라..복사를 한다음 업무를 처리한다.
그 복사본을 찢던 꾸기던 멀 하던간에 내 진짜 주민등록증이 꾸겨지고 찢어지는 것이 아니라는 것이다.
그냥 복사한 걸 넘겨주었기 때문에..내껀 아무 이상 없다고 생각 하면 되지 않을까.?
----

 

'JAVA' 카테고리의 다른 글

16장  (0) 2010/09/03
15장 스레드  (0) 2010/09/02
자바 11장(예외처리)  (0) 2010/08/31
자바 10장  (0) 2010/08/31
자바용어 2  (0) 2010/08/23
JAVA 기본 용어..1  (0) 2010/08/23
Posted by 고고씽 고고씨잉