[JAVA] 상속 - 타입 변환과 다형성
Language/Java2023. 1. 8. 00:17[JAVA] 상속 - 타입 변환과 다형성

본 게시글은 혼자 공부하는 자바 (저자 : 신용권)의 책과 유튜브 영상을 참고하였고, 개인적으로 정리하는 글임을 알립니다. 기본 타입(기본 자료형)의 타입 변환(형 변환)에는 자동 타입 변환이 있고, 강제 타입 변환이 있다. 클래스에도 이러한 타입 변환이 있다. 메소드 재정의(오버라이딩)와 타입 변환을 이용하면 객체 지향 프로그래밍의 매우 중요한 특징인 다형성을 구현할 수 있다. 다형성은 사용 방법은 동일하지만 다양한 객체를 이용해서 다양한 실행결과가 나오도록 하는 성질이다. 예를 들어 자동차가 타이어를 사용하는 방법은 동일하지만 어떤 타이어를 장착하느냐에 따라 주행 성능이 달라질 수 있다. 어떤 타이어는 고속주행에 유리한 타이어이고, 또 다른 타이어는 눈길에서 미끄러지지 않고 주행할 수 있는 타이어가 ..

[JAVA] 상속과 메소드 재정의(Overriding)
Language/Java2023. 1. 7. 00:24[JAVA] 상속과 메소드 재정의(Overriding)

본 게시글은 혼자 공부하는 자바 (저자 : 신용권)의 책과 유튜브 영상을 참고하였고, 개인적으로 정리하는 글임을 알립니다. 현실에서 상속은 부모가 자식에게 재산, 유전 정보 등을 물려주는 행위를 말한다. 자식은 상속을 통해서 부모가 물려준 것을 이용할 수 있다. 객체 지향 프로그래밍에서도 부모 클래스의 멤버를 자식 클래스에게 물려줄 수 있다. 프로그램에서 부모 클래스를 상위 클래스라고 부르고, 자식 클래스를 하위 클래스 또는 파생 클래스라고 부른다. 상속은 이미 잘 개발된 클래스를 재사용해서 새로운 클래스를 만들기 때문에 중복되는 코드를 줄여준다. 클래스 상속 자식 클래스를 선언할 때 어떤 부모 클래스를 상속받을 것인지 결정하고, 선택된 부모 클래스는 extends 뒤에 기술한다. class derive..

[JAVA] 접근 제한자(Access Modifier)
Language/Java2023. 1. 6. 00:42[JAVA] 접근 제한자(Access Modifier)

본 게시글은 혼자 공부하는 자바 (저자 : 신용권)의 책과 유튜브 영상을 참고하였고, 개인적으로 정리하는 글임을 알립니다. 접근 제한자 접근 제한자는 말 그대로 접근을 제한하기 위해 사용됨 여기서 접근이란 클래스 및 인터페이스 그리고 이들이 가지고 있는 멤버의 접근을 말한다. 어떤 경우에 클래스와 인터페이스를 다른 패키지에서 사용하지 못하도록 막을 필요가 있다. 그리고 객체 생성을 막기 위해 생성자를 호출하지 못하게 하거나 필드나 메소드를 사용하지 못하도록 막아야 되는 경우도 있다. 이때 접근 제한자를 사용할 수 있다. public 접근 제한자 : 외부 클래스가 자유롭게 사용할 수 있도록 함 protected 접근 제한자 : 같은 패키지 또는 자식 클래스에서 사용할 수 있도록 함 private 접근 제한..

[JAVA] 패키지(Package)
Language/Java2023. 1. 5. 13:48[JAVA] 패키지(Package)

본 게시글은 혼자 공부하는 자바 (저자 : 신용권)의 책과 유튜브 영상을 참고하였고, 개인적으로 정리하는 글임을 알립니다. 프로젝트를 개발하다 보면 적게는 수십 개, 많게는 수백 개의 클래스를 작성해야 한다. 클래스를 체계적으로 관리하지 않으면 클래스 간의 관계가 뒤엉켜서 복잡하고 난해한 프로그램이 되어 결국 유지 보수가 어렵다. 자바에서는 클래스를 체계적으로 관리하기 위해 패키지를 사용한다. 패키지의 물리적인 형태는 파일 시스템의 폴더이다. 패키지는 단순히 파일 시스템의 폴더 기능만 하는 것이 아니라 클래스의 일부분으로, 클래스를 유일하게 만들어주는 식별자 역할을 한다. 클래스 이름이 동일하더라도 패키지가 다르면 다른 클래스로 인식한다. 클래스의 전체 이름은 '패키지 이름 + 클래스 이름'인데 패키지가..

[JAVA] 인스턴스 멤버와 정적 멤버
Language/Java2023. 1. 3. 00:43[JAVA] 인스턴스 멤버와 정적 멤버

혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다. 객체마다 필드값이 달라야 한다면 해당 필드는 객체마다 가지고 있는 것이 맞다. 하지만 객체의 필드값이 모두 같아야 한다면 이 필드를 객체마다 가지고 있을 필요가 있을지 의문이 든다. 만약 객체마다 갖고 있다면 메모리가 낭비되며, 모든 객체의 필드값을 같게 맞추는 추가적인 작업이 필요할 수도 있다. 오히려 이런 필드는 한 곳에 위치시키고 객체들이 공유하는 것이 좋을 수 있다. 자바는 이런 경우를 위해 클래스 멤버를 인스턴스 멤버와 정적 멤버로 구분해서 선언할 수 있도록 하고 있다. 인스턴스 멤버는 객체마다 가지고 있는 멤버를 말하고, 정적 멤버는 클래스에 위치시키고 객체들이 공유하는 멤버를 말한다. 인스턴스 멤버와 thi..

[JAVA] 메소드(Method)
Language/Java2023. 1. 2. 00:49[JAVA] 메소드(Method)

혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다. 메소드 선언은 선언부와 실행 블록으로 구성된다. 메소드 선언부를 메소드 시그니처라고 한다. 메소드 시그니처에는 리턴타입, 메소드 이름, 매개 변수 선언이 온다. 메소드 선언 리턴 타입 리턴 타입은 있을 수도 있고 없을 수도 있다. 리턴 타입이 없다면 void라고 명시하면 되고, 리턴 타입이 있다면 해당 타입을 명시하면 된다. 리턴 타입이 있다면 반드시 리턴 값을 리턴해야 한다. 리턴 값을 담는 변수와 리턴 값이 자동으로 형변환이 된다면 타입이 달라도 상관이 없다. 메소드 이름 메소드 이름은 자바 식별자 규칙에 맞게 작성하면 된다. 관례적으로 메소드 이름은 소문자로 작성한다. 서로 다른 단어가 혼합된 이름이라면 뒤이어 오..

[JAVA] 생성자(Constructor)
Language/Java2023. 1. 1. 00:26[JAVA] 생성자(Constructor)

혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다. 생성자 생성자는 new 연산자로 클래스로부터 객체를 생성할 때 호출되어 주로 객체의 초기화를 담당한다. 생성자를 실행하지 않고는 클래스로부터 객체를 만들 수 없다. 모든 클래스는 생성자가 반드시 존재하며, 생성자를 하나 이상 가질 수 있다. new 연산자에 의해 생성자가 실행되면 힙 영역에 객체가 생성되고 객체의 주소가 리턴된다. 리턴된 객체의 주소는 클래스 변수에 저장된다. 기본 생성자(Default Constructor) 클래스 내부에 생성자 선언을 생략했다면 컴파일러는 기본 생성자를 바이트 코드에 자동 추가한다. 클래스가 public class로 선언되면 기본 생성자에서도 public이 붙지만 클래스가 public..

[JAVA] 클래스(Class)
Language/Java2022. 12. 30. 00:17[JAVA] 클래스(Class)

혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다. 클래스는 두 가지 용도가 있다. 하나는 라이브러리(API)용이고, 다른 하나는 실행용이다. 라이브러리 클래스는 다른 클래스에서 이용할 목적으로 설계된다. 프로그램 전체에서 사용되는 클래스가 100개라면 99개는 라이브러리 클래스이고, 단 하나가 실행용 클래스이다. 실행용 클래스는 프로그램의 실행 진입점인 main()메소드를 제공하는 역할을 한다. 클래스 구성 멤버 클래스의 구성 멤버로는 필드(field), 생성자(constructor), 메소드(method)가 있다. 필드 선언 형태는 변수와 비슷하지만, 필드를 변수라고 부르지는 않는다. 변수는 생성자와 메소드 내에서만 사용되고 생성자와 메소드가 실행 종료되면 자동 소멸..

image