[Java] 자바 인터페이스(Interface)란?
·
Java/자바 이론
자바는 단일 상속이 원칙이다. 하지만 다중 상속을 지원하기 위해서 인터페이스가 존재한다. 인터페이스는 오로지 상수(final) 와 추상 메서드만 갖을 수 있다. (추상 클래스보다 더 추상화 정도가 높다.) 인터페이스 특징 1. 인터페이스의 구조 interface 인터페이스명{ public static final int a = 3; // 필드는 상수 public abstract void disp(); // 추상 메서드만 존재 } 상수와 추상 메서드 만으로 구성이 되어있다. 생략하면, 컴파일러가 자동으로 삽입해준다. 모든 필드 : public static final (*필드는 선언과 동시에 초기화 되어야 한다.) 모든 메서드 : public abstract (상속받는 자식은 오버라이딩이 강제된다.) 2. 다..
[Java] 추상 클래스와 추상 메서드 (abstract)
·
Java/자바 이론
추상 클래스는 추상 메서드를 하나라도 가지고 있는 클래스를 말한다. 추상 메서드는 '메서드의 본체가 완성되어 있지 않은 미완성 메서드'를 말한다. 상속을 목적으로 사용하며 자식 클래스에서 오버라이딩을 강제한다. 1. 추상 클래스의 특징 1. 객체를 직접 생성할 수 없다. 힙 메모리에 생성되는 객체는 내부 요소가 미완성된 상태로 들어갈 수 없기 때문이다. 따라서 추상 클래스를 상속하는 자식 클래스는 부모에게 상속받은 추상 메서드를 반드시 완성(오버라이딩) 해야 한다. (강제성을 부여한다.) 만약, 오버라이딩하지 않을 경우 상속 받은 추상 메서드를 포함하고 있기 때문에 자식 클래스도 추상클래스가 된다. 2. 추상 메서드는 선언부만 존재하며 구현부는 존재하지 않는다. 이 구현부를 자식 클래스에서 오버라이딩해서..
[Java] 메서드 오버로딩과 오버라이딩
·
Java/자바 이론
오버로딩은 한 클래스 내에서 같은 이름을 갖고 있지만 서로 다른 매개변수 형식을 가지고 있는 메서드를 여러개 정의하는 것을 의미한다. 오버라이딩은 부모 클래스에게 상속받은 메서드와 동일한 이름의 메서드를 재정의 하는 것을 의미한다. 1. 오버로딩 1. 조건 ⦁메서드의 이름이 같고, 매개변수의 개수나 타입이 달라야 한다. 리턴 값만 다른 것은 오버로딩 할 수 없다. ⦁같은 목적으로 사용하는 메서드들만 오버로딩 해야한다. (주의사항) 2. 사용하는 이유 ⦁같은 기능을 하는 메서드를 여러 개 정의하고 외우지 않아도 되기 때문에 편리하다. ⦁컴파일러의 특성 2. 오버라이딩 1. 조건 ⦁부모 클래스의 메서드와 시그니처 및 리턴 타입이 동일해야 한다. ⦁부모 클래스의 메서드보다 접근 지정자의 범위가 같거나 넓어야한..
[Java] 자바 super 키워드 & super() 메서드
·
Java/자바 이론
this는 자신의 객체, this()는 자신의 생성자를 의미했다면, super 키워드는 부모의 객체, super()는 부모의 생성자를 의미한다. 부모 클래스와 관련이 있으므로 상속 관계에서만 사용이 가능하다. 1. super 키워드 super 키워드는 부모의 객체를 가리키는 참조(Reference) 변수다. 필드명의 중복 또는 메서드 오버라이딩으로 가려진 부모의 필드 또는 메서드를 호출하기 위해 사용한다. super.abc(); 명시적으로 부모객체의 abc메서드라는 것을 알 수 있다. 2. super() 메서드 부모의 생성자를 호출하는 메서드다. 생략하면 컴파일러가 자동으로 넣어주기 때문에 항상 자식 클래스의 첫 줄에 존재한다. 따라서 모든 자식클래스는 super()메서드를 통해 최상위 클래스의 생성자부..
[Java] 자바 클래스 상속의 장점과 특징
·
Java/자바 이론
상속이란 자식 클래스(Sub Class)가 부모 클래스(Super Class)의 기능을 그대로 물려받아 사용할 수 있는 것을 말한다. 객체지향 프로그래밍에서 상속은 중요한 개념이므로 잘 숙지하자. 상속의 장점 1. 코드의 중복성이 제거된다. 자식 클래스들의 공통적인 성분을 뽑아 부모 클래스에서 한번만 정의하기 때문에 코드가 간결해진다. 또한 상속받은 자식 클래스를 사용할 때 부모 클래스의 메서드를 마치 본인의 메서드처럼 사용할 수 있기 때문에 편리하다. 2. 다형적 표현이 가능하다 (=다형성) 1개의 객체를 여러 가지 모양으로 표현할 수 있는 특성을 다형성이라고 한다. '대학생은 사람이다.', '직장인은 사람이다'와 같이 '사람' 이라는 객체를 다양하게 표현이 가능하다. 코드가 간결해지는 것도 있지만, ..
[Java] 클래스 관계 HAS-A (포함) / IS-A (상속) 정리
·
Java/자바 이론
클래스는 객체지향 프로그래밍에서 중요한 개념이다. 클래스의 Has-a, Is-a 관계에 대해 알아보자. 1. HAS-A (포함) 관계 HAS-A는 포함관계를 의미한다. ( ~는 ~을 가지고 있다.) 다른 클래스의 기능(변수 혹은 메서드)을 받아들여 사용한다. (ex강사님이 펜을 사용해 칠판을 적는 것) - 받아들인 객체의 자원(메소드/변수)을 사용할 수 있다. - 어떤 클래스 A가 또 다른 클래스인 B가 가진 기능을 사용하고 싶을때 B 클래스를 포함하면 B 클래스의 기능을 사용할 수 있다. 2. IS-A (상속) 관계 IS-A는 말 그대로 'A는 B이다' 와 같다. 클래스의 상속은 IS-A관계에서 사용하는 것이 가장 효율적이다. ex) 경찰차는 차다. 트럭은 차다. 버스는 차다. 즉, 추상화한 클래스를 ..
[Java] 클래스 내부 구성 요소 3가지 (필드, 생성자, 메서드 + This)
·
Java/자바 이론
클래스의 필드, 생성자, 메서드에 대해 알아보자. 또한 클래스 내부에서 자신의 객체를 가리키는 this키워드와 자신의 다른 생성자를 호출하는 this() 메서드도 학습한다. 필드 ( Field ) 필드는 '클래스에 포함된 변수'로, 객체의 속성값을 지정할 수 있다. 지역 변수는 '메서드에 포함된 변수'다. 즉, 필드와 지역 변수는 어떤 중괄호 안에 선언됐는지에 따라 구분할 수 있다. (선언 위치가 중요하다.) 가장 큰 차이점은 생성되는 메모리의 위치다. 필드 = Heap 메모리의 객체 내부 지역 변수 = 스택 메모리 스택 메모리에 있는 변수는 JVM이 자동으로 삭제하지만, 힙 메모리의 객체 안에 저장되는 필드는 객체가 사라지지 않는 한 절대로 삭제되지 않는다. 1. 필드 - 외부에서 객체를 사용할 때 지..
[Java] String 객체 특징 ( ==와 equals의 차이점 )
·
Java/자바 이론
Stirng도 당연히 클래스이므로 클래스의 특징을 모두 지니고 있다. 하지만 워낙 자주 사용되다보니, 특별한 2가지의 특징이 있다. 1. 한 번 정의된 문자열은 변경할 수 없다. = 문자열의 내용을 변경하면 JVM은 수정하는 것이 아니라, 새로운 객체를 생성하고 기존의 객체를 버린다. 2. 문자열 리터럴을 바로 입력해 객체를 생성할 때 같은 문자열끼리 객체를 공유한다. ( => 메모리의 효율성 ) s1, s2처럼 String 객체를 생성하면,먼저 String pool에 같은 값이 있는지 확인한다. 만약 있다면 그 주소값을 리턴하고 없다면 새로운 객체를 만들어 String pool에 할당한 뒤 그 주소값을 리턴한다. s3처럼 new로 객체를 생성하면, 다른 객체들처럼 강제로 Heap 영역에 생성하고 그 주..