본문 바로가기

JAVA

(46)
[JAVA] 기초문법 - 추상클래스와 템플릿 메서드 추상메서드는 하위 클래스에서 구현(차 마다 방식이 다르다고 가정) run 메서드는 시나리오(함수 호출의 순서(과정)) final 메서드로 정의하면 하위클래스에서 오버라이딩 할 수 없다.ㅡ>템플릿 메서드 즉, 변하지 않는 일련의 과정을 정의할때는 하위 클래스에서 오버라이딩(재정의)할 수 없게 final 키워드를 붙인다. final 키워드는 접근제어자 앞이나 뒤에 써도 상관 없다. 템플릿 메서드 장점 시나리오 수정(추가,삭제 등)이 용이하다. 추상메서드가 아닌 선언만 한 메서드(구현하지 않은 메서드)를 선언해 놓고 필요에 따라 정의만 해서 사용이 가능하다. 시나리오는 정의해 놓고 필요에 따라 하위클래스에서 waschcar()메서드를 재정의해서 사용할 수 있다. ㅡ> 훅메서드 라고 불림.(프레임워크 에서 많이..
[JAVA] 기초문법 - 추상클래스 활용하기 추상클래스 추상메서드 구현부가 없는 메서드 이다.(매개변수,반환형,함수이름,접근제어자만 선언해 놓는 것) 추상메서드가 포함되어 있으면 해당 메서드를 포함하는 클래스는 추상클래스여야함. 추상메서드만 가져야하는 것은 아니다. 추상메서드는 상속을 하기 위해 만든다. 추상클래스는 인스턴스화 될 수 없다. 추상클래스를 상속받은 하위 클래스들은 만드시 추상메서드를 구현해야한다. 추상메서드를 구현하지 않을 것이라면 추상클래스가 되어야 한다. 상속받은 추상메서드 구현한 모습. 상속받은 추상메서드를 전부 구현하지 않을 것이라면 해당 클래스는 추상 클래스가 되어야 한다. 추상메서드를 구현하지 않은 추상클래스를 상속받은 또다른 클래스에서 구현하지 않은 추상메서드를 구현한 모습. 상위클래스는 추상메서드 구현을 하위클래스에게 ..
[JAVA] 기초문법 - 다형성 활용과 다운캐스팅 여러개의 클래스 타입을 상위 클래스 배열로 관리. 상속받았고, 업캐스팅인 경우에 인스턴스만의 메서드를 호출 하고 싶을때 다운캐스팅이 필요하다. 들어온 인스턴스의 타입을 확인하고 해당 타입으로 다운캐스팅 하는 코드이다. (인스턴만의 메서드를 호출하기 위해)
[JAVA] 기초문법 - 오버라이딩과 다형성(3) 메서드 오버라이딩 오버로딩: 이름이 같은 메서드가 여러개 있는것(매개변수,반환병은 다를 수 있음.) 오버라이딩: 메서드를 덮어 쓰는 것.(매개변수 반환명 모두 같아야함. 구현부만 다름) 같음 이름의 함 수 이지만, (vip클래스가 custimer클래스를 상속받는 상태) 오버라이딩 된 메서드가 불린 것을 알 수 있다. 업스캐스팅 된 경우에도 오버라이딩 된 메서드가 호출 된 것을 알 수 있다. 즉, 재정의된(오버라이딩 된) 메서드가 호출 된다. ㅡ> 가상 메서드 개념 , 자바는 기본적으로 모든 메서드가 가상메서드이다. add라는 함수를 호출 할때 add(5,3)을 부르는 것과 add(10,2)를 부르는 것은 매개변수는 다르지만, add란 함수의 주소값은 같다.(똑같은 함수를 참조한다. ) 인스턴스 변수와 다..
[JAVA] 기초문법 - 상속과 다형성(2) 접근 제한자 정리 상속에서 클래스 생성 과정 super은 상위클래스를 가르킴. 모든 자바 클래스의 최상위 클래스는 object 클래스이다. 상속에서 메모리 상태 만약에 상위클래스에 private 변수가 있다면, 메모리에 생성은 되지만 하위 클래스에서 접근 할 수가 없는 것. 상위 클래스의 생성자가 디폴트가 아닌 매개변수가 있는 생성자인경우. 예시) 이런경우 하위클래스에서 오류가 발생함. ㅡ> 컴파일러가 자동으로 super()키워드를 삽입해주지만 super()은 디폴트 생성자를 의미하기 때문. 즉, 하위클래스 생성자에서 super(매개변수); 를 명시적으로 호출해야함. super 예약어 상위 클래스로의 묵시적 형 변환(업캐스팅) 모든 하위 클래스는 상위클래스의 일종이다. 따라서 업캐스팅이 가능하다. 하지만..
[JAVA] 기초문법 - 상속과 다형성(1) 상속과 다형성 상속의 목표: 상속을 사용하면 다형성을 구현할 수 있다. 다형성은 객체지향프로그래밍(JAVA)에 가장 큰 장점이다. 유지보수하기 용이하다. 유연한 프로그래밍이 가능하다. 상위 클래스가 하위클래스를 상속한다. 라고 표현 하위클래스는 상속받았다.라고 표현 화살표는 하위클래스 ㅡ> 상위클래스로 표현 상속을 설명할때 재사용이라는 개념이 자주 사용되는데, 재사용은 상속을 정확히 대변하는 것은 아니다. 일반적인 의미, 구체적인 의미를 가진다는 표현이 더 정확하다. 재사용의 개념은 크게 2가지로 나뉜다. 1.상속(is -a 관계) ex) 일반적인 클래스에서 기능의 확장으로 구체적인 클래스를 만들기 위해서 사용. 상속 예시 2.합성(has-a 관계) ex) b클래스에서 a클래스의 변수를 활용하고 싶을때 ..
[JAVA] 기초문법 - 디버깅 이클립스에서 자바 디버깅하기 더블클릭으로 breakpoint 설정 디버거 클릭 스위치 클릭 창이 바뀌는데 다시 java창으로 돌아가려면 우측상단 가운데 java 클릭 디버거 버튼을 한 번 더 누르면 창이 하나 더 생기는데 이러면 2개의 스레드가 동작하는 것임. 스레드 하나를 동작하지 않게 하는 방법은 해당 스레드로 가서 빨간 멈춤 버튼 클릭 각 breakpoint에서 F5버튼을 누르면 해당 함수 안으로 들어가겠다 라는 의미 우측에 현재 변수들을 볼 수 있음. F6은 한줄씩 실행. F7은 들어온 곳에서 다시 이전으로 돌아갈때 사용 F8은 다음 breakpoint까지 실행 우측 expressions 창에서 추가적으로 알고 싶은 변수를 추가해서 볼 수 있음.
[JAVA] 기초문법 - 배열과 ArrayList(4) arraylist 클래스 컨트롤+시프트+o(영어) 를 누르면 자동으로 import가 된다. F1키를 누르면 해당 클래스가 제공하는 설명을 볼 수 있다. ArrayList 요소 추가 및 출력 예제 list[1] 과 같은 접근은 허용하지 않는다. arraylist는 인덱스 연산자를 제공하지 않는다. 인덱스 연산자는 순수배열에서만 제공한다. 을 명시하지 않을 수도 있지만 참조할때 반드시 형변환을 해줘야한다. 을 명시하지 않으면 오브젝트 타입이다. 타입을 명시하는 것이 일반적이다. ㅡ> 상속에서 자세히 설명 arrayList 클래스 사용하기