기술 블로그

java 복습 2일 차 본문

백엔드/JAVA

java 복습 2일 차

jaegwan 2018. 9. 24. 13:30
반응형

6. 자바 라이브러리


*정말 빠른시간내에 벼락치기로 자바를 이해해야 할게 아니라면 해드퍼스트 자바는 사지말자. 점프 투 자바같은 최신 블로그로 한번더 정리해야한다. (혹시 보더라도 도서관에서 빌리자.)


ArrayList

  • add(Object elem) 객체 매개변수 목록에 추가
  • remove(int index) index매개변수로 지정한 위치에 있는 객체를 제거
  • remove(Object elem)  주어진 객체가 ArrayList에 있으면 그 객체를 제거 
  • contains(Object elem) 객체 매개변수 elem에 매치되는 것이 있으면 '참'을 리
  • isEmpty() 목록에 아무것도 없으면 '참'을 리턴
  • indexOf(Object elem)객체 매개변수의 인덱스나 -1을 리턴
  • size() 현재 목록에 들어있는 원소갯수
  • get(int index) 주어진 매개변수 위치에 있는 객체를 리턴    
1
2
3
4
5
ArrayList<Egg> myList = new ArrayList<Egg>();
//egg유형의 객체가 들어간다는 뜻
Egg s = new Egg();
myList.add(s);
Egg b = new Egg();
myList.add(b);
cs

기존 배열과 다른점
  1. 유형은 둘다 지정함 그러나 ArrayList에서는 크기를 지정 안해도 됨
  2. 일반 배열에 객체를 넣을때{myList[1] = b;}는 index를 지정해야하나 ArrayList에서는 필수가 아님add(정수,객체)or add(객체)
  3. 일반 배열은 일반 자바 문법과 다르게 []가 쓰임
  4. 자바에서는 배열이 매개변수화 되어있음


단락 연산자 and 연산자 or 연산자(&& ,||)


같지 않음(!,!=)

1
2
if( a != 100){}
if (!a.equals(1000)){}
cs


비단락 연산자(&,|)

부울에서 자용하거나 (단락연산자와 뜻은같음)

양쪽모두 확인을 강제하거나

비트를 조작함



7.객체


하위클래스가 상위클래스로부터 상속받는다.

=상위클래스를 확장(exdend)한다.


클래스의 맴버==인스턴스변수와 메소드


인스턴스 변수는 오버라이드 할 필요가 없기때문에 오버라이드 하지않는다.메소드를 오버라이드 한다.

1
public class Doctor extends job{}
cs


객체 레퍼런스에 있는 메소드를 호출하면 가장 아래 있는 것이 호출된다.


하위클래스는 상위클래스 이다.라는 문장적 관계가 성립하면 상속트리로 된다.



public으로 지정한 메소드나 인스턴스 변수는 상속하나

private로 지정한 인스턴스 변수와 메소드는 상속 안함


호출할때는 구체적인 버전(오버라이드 한 버전) 이 호출된다.



다형성 활용 예 (레퍼런스와 객체가 다른유형이어도 됨)

1
Animal myDog = new Dog();
cs


레퍼런스 유형을 상위클래스로 지정가능


final은 하위클래스를 못만듬



  • 오버라이드 규칙 
    • 인자(받는것)는 똑같아야 하고 리턴유형은 호환 가능해야 합니다.
    • 메소드를 더 접근하기 어렵게 만들면 안된다(ex)public에서 private로 x)

  • 메소드는 입력값이 있고, 그 입력값을 받아서 무언가 한 다음 결과를 도출해 내는 수학의 함수와 비슷한 개념이다.
  • 이때 입력값을 매개변수라고 하고,결과값을 리턴값이라고 합니다.
    • 인자( Argument ) 는 어떤 함수를 호출시에 전달되는 값을 의미한다.
    • 매개 변수( Parameter ) 는 그 전달된 인자를 받아들이는 변수를 의미한다.
  • 메소드란 클래스가 가지고 있는 기능이다. 클래스 안에 선언됩니다.


메소드 오버로딩(상속이나 다형성과는 상관없는개념 오버라이딩이랑 이름만 비슷함)


  • 오버로딩 특징
    • 리턴유형이 달라도 됨
    • 리턴유형만 바꿀수는 없음 인자목록도 변경
    • 접근 단계를 마음대로 바꿀 수 있

public class Overloadingtest {

    // test() 호출
    void test(){
        System.out.println("매개변수 없음");
    }
    
    // test에 매개변수로 int형 2개 호출
    void test(int a, int b){
        System.out.println("매개변수 "+ a + "와 " + b);
    }
    
    // test에 매개변수 double형 1개 호출
    void test(double d){
        System.out.println("매개변수 " + d);
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class test {
 
    public static void main(String[] args) {
        
        // Overloadingtest 객체 생성
        Overloadingtest ob = new Overloadingtest();
        
        // test() 호출
        ob.test();
        
        // test(int a, int b) 호출
        ob.test(1020);
        
        // test(double d) 호출
        ob.test(50);
        
        // test(double d) 호출
        ob.test(123.4);
    }
}
 
cs


예제에서와 같이 test 라는 같은 이름의 메소드를 여러개 정의하고 매개변수만 변경하여 선언했을 때, 호출 매개변수에 따라 매칭되어 함수를 실행시킨다.


 구분

오버로딩

오버라이딩 

 메소드 이름

 동일

동일 

매개변수 타입 

비동일 

동일 

리턴 타입 

상관없음

동일 





8 인터페이스와 추상클래스

인스턴스(객체 선언시)를 만들면 안되는 클래스도 있다==추상클래스


추상클래스는 확장시 쓸모가 있다.


1
public abstract void eat();
cs

추상메소드는 몸통{}이 없다.


다형성을 위함



구상클래스(Dog)에선 그 추상 클래스를 구현해야함



자바에서 모든 클래스는object 클래스르 확장한것(상속받은것)


object= equals hashCode getClass toString


object인자로 받으면 똑같은 레퍼런스가 리턴되긴하지만 object유형으로 리턴됨 



컴파일러에서 어떤메소드를 호출할 수 있는 지 결정할 때는 실제 객체 유형이 아닌 레퍼런스 유형을 기준으로 따집니다.


다형성

1
2
3
Snow a = new Snow;
 
Object b = a;

cs


객체 레퍼런스를 실제 유형으로 캐스팅

1
2
3
Object o = al.get(index)
Dog d = (Dog) o;
d.roam();
cs


 다중상속


죽음의 다이아몬드 형태는 피해야함


interface == 100% 순수한 추상클래스와 비슷함


인터페이스 정의 및 구현


1
2
3
4
5
6
//인터페이스 정의  class 자리에 interface 자동으로 public과 abstract가 적용되니 안써도 됨,인터페이스속 메소드는 모두 추상메소드
public interface Pet{
}
//인터페이스를 구현하려면 implements
public class Dog extends canine implements Pet{
}
cs

한 클래스와 여러인터페이스를 구현 가능


상위 클래스 버전 호출은 super사용  this 는 자기 클래스의 전역변수 사용


9. 생성자와 가비지 컬렉션


인스턴스 변수 = 클래스 내에서 (메소드 내에서 한건 미포함)


지역 변수 =메소드 내에서(중괄호 끝나기 전까지 살아 있음) 


생성자를 호출할때는 new라는 키워드를 쓰고 그 뒤에 클래스명을 적어줘야 한다.


직접 만들수도 있지만 컴파일러에서 알아서 만들어 준다.


ex public Duck(){} //괄호 때문에 메소드를 호출하는것처럼 보일 수 있으나 사실은 ex모양의 생성자를 호출하는 것 (클래스 안에씀)


클래스에 생성자가 두개 이상있으면 생성자의 인자목록은 달라야 한다.


 기본 생성자는 인자가 없다. 


인자가 있는 생성자는 직접만들어야한다. 생성자가 아예없을때만 컴파일러가 인자 없는 생성자를 만들어준다


만약 두 생성자가 필요하다면 둘다 만들어야한다.


private로 생성자를 지정하면 같은 클래스 안에서만 접근가능




상위클래스 생성자가 호출하는 방법 super();


super();을 호출하는 선언문은 모든 생성자의 첫번째 선언문이어야 한다.


this : 현재객체에 대한 레퍼런스


레퍼런스를 직접 null로 설정하면 객체가 죽는다.


Math메소드는 거의 전역 매소드 


static키워드를 사용하면 클래스의 인스턴스 없이 메소드를 실행할 수 있다.


정적static 메소드를 호출할 때는 클래스 명을 사용한다. myFoo.go()


정적메소드:인스턴스 변수에 따라 행동이 달라지지 않기 때문에 인스턴스나 객체가 필요하지 않고, 클래스명만 있어도 된다.


정적메소드가 아닌 메소드를 사용할때는 레퍼런스 변수형



정적메소드에서는 정적 변수만 써야함 또 정적 메소드만 써야함



클래스에 들어있는 모든 정적변수는 그 클래스의 객체가 처음으로 만들어지기 전에 초기화된다.


static final로 선언되면 상수다.


final은 메소드 클래스 정적변수가 아닌것에도 쓸 수 있다.



10. 언어는 벼락치기로 공부하지 말자



Math메소드


1
2
3
4
5
6
7
Math.random();// 0과 1사이 실수를 랜덤으로 리턴
 
Math.abs()// 절대값을 리턴
 
Math.round()// 가장 가까운 정수를 반올림하여 리턴
 
Math.min(a,b),max //최소 최대값 리턴
cs


String을 원시값으로 변환 
1
int x = Integer.pauseInt(b)
cs

원시숫자를 String으로 변환
1
2
3
String k = ""+b
or
String k = Double.toString(d);
cs



숫자 포메팅

1
format("i have %,d",10000000);
// i have 10,000,000


cs


%,d 쉼표넣고 10진수 정수

%.2f 소수 둘째자리까지 출력하는 부동소수점

%,.f 쉼표도넣고 소수점아래 둘째자리까지

%d 십진정수

%f 부동소수점

%x 16진수

%c 문자


캘린더를 확장하는 객체 인스턴스를 받는방법


추상클래스의 인스턴스를 직접받을수 없으므로 


getInstance라는 정적 메소드를 씁니다.


1
Calendar cal = Calendar.getInstance();
cs



보통 변수의 static 키워드는 프로그래밍 시 메모리의 효율보다는 두번째 처럼 공유하기 위한 용도로 훨씬 더 많이 사용하게 된다.


스태틱 메소드 안에서는 인스턴스 변수 접근이 불가능 하다. 위 예에서 count는 static 변수이기 때문에 스태틱 메소드(static method)에서 접근이 가능한 것이다.


Static 메소드 :클래스의 인스턴스 없이  메소드를 실행가능

  • 객체가 생성되지 않은 상태에서 호출되는 메소드. 객체안에서만 존재하는 인스턴스 변수 및 메소드들을 내부에서 사용할 수 없다.
  • 메소드 내부에서는 정적, 지역 변수만을 사용한다. (this 키워드도 인스턴스 변수이므로 사용 불가)
  • 인스턴스 변수에 따라 행동이 달라지지 않기 때문에 인스턴스나 객체가 필요하지 않고, 클래스명만 있어도 된다. (일반 메소드를 사용할 때는 레퍼런스 변수를 사용한다.)
  • static 메소드와 API: Util 클래스의 getCurrentDate메소드는 static 메소드.


반응형

'백엔드 > JAVA' 카테고리의 다른 글

java 복습 4일차  (0) 2018.09.26
java 복습 3일 차  (0) 2018.09.25
자바 복습 계획  (0) 2018.09.24
java 복습 1일 차  (1) 2018.09.23
java 복습 0일 차  (0) 2018.09.22
Comments