![[JAVA] 추상 클래스(Abstract Class), 추상 메소드(Abstract Method)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ2B9e%2FbtrVpe21BUE%2F2ZPcAuIiFtuANfOk7hIAuK%2Fimg.jpg)
본 게시글은 혼자 공부하는 자바 (저자 : 신용권)의 책과 유튜브 영상을 참고하였고, 개인적으로 정리하는 글임을 알립니다.사전적 의미로 추상은 실체 간에 공통되는 특성을 추출한 것을 말한다. 예를 들어 새, 곤충, 물고기 등의 실체에서 공통되는 특성을 추출해보면 동물이라는 공통점이 있다.여기서 동물은 구체적인 실체라기보다는 실체들의 공통되는 특성을 가지고 있는 추상적인 것이라고 볼 수 있다.추상 클래스객체를 직접 생성할 수 있는 클래스를 실체 클래스라고 한다면 이 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상 클래스라고 한다. 추상 클래스와 실체 클래스는 상속의 관계를 가지고 있다. 추상 클래스가 부모, 실체 클래스가 자식으로 구현되어 실체 클래스는 추상 클래스의 모든 특성을 물려받고, 추가적..
![[JAVA] 상속 - 타입 변환과 다형성(매우 중요)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FviEHP%2FbtrVjnz9GER%2FzaV6B2QF28VWdHsPVapgZ1%2Fimg.jpg)
본 게시글은 혼자 공부하는 자바 (저자 : 신용권)의 책과 유튜브 영상을 참고하였고, 개인적으로 정리하는 글임을 알립니다.기본 타입(기본 자료형)의 타입 변환(형 변환)에는 자동 타입 변환이 있고, 강제 타입 변환이 있다.클래스에도 이러한 타입 변환이 있다.메소드 재정의(오버라이딩)와 타입 변환을 이용하면 객체 지향 프로그래밍의 매우 중요한 특징인 다형성을 구현할 수 있다.다형성은 사용 방법은 동일하지만 다양한 객체를 이용해서 다양한 실행결과가 나오도록 하는 성질이다. 예를 들어 자동차가 타이어를 사용하는 방법은 동일하지만 어떤 타이어를 장착하느냐에 따라 주행 성능이 달라질 수 있다.어떤 타이어는 고속주행에 유리한 타이어이고, 또 다른 타이어는 눈길에서 미끄러지지 않고 주행할 수 있는 타이어가 있듯이 말..
![[JAVA] 상속과 메소드 재정의(Overriding)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0V367%2FbtrVcNFeOep%2FjZtaQWkrdqpZvwFrkry4l0%2Fimg.jpg)
본 게시글은 혼자 공부하는 자바 (저자 : 신용권)의 책과 유튜브 영상을 참고하였고, 개인적으로 정리하는 글임을 알립니다. 현실에서 상속은 부모가 자식에게 재산, 유전 정보 등을 물려주는 행위를 말한다. 자식은 상속을 통해서 부모가 물려준 것을 이용할 수 있다. 객체 지향 프로그래밍에서도 부모 클래스의 멤버를 자식 클래스에게 물려줄 수 있다. 프로그램에서 부모 클래스를 상위 클래스라고 부르고, 자식 클래스를 하위 클래스 또는 파생 클래스라고 부른다. 상속은 이미 잘 개발된 클래스를 재사용해서 새로운 클래스를 만들기 때문에 중복되는 코드를 줄여준다. 클래스 상속 자식 클래스를 선언할 때 어떤 부모 클래스를 상속받을 것인지 결정하고, 선택된 부모 클래스는 extends 뒤에 기술한다. class derive..
![[JAVA] 접근 제한자(Access Modifier)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSMxTG%2FbtrUV24tHru%2FuEAb7bTSLOtGUB4gZKCft1%2Fimg.jpg)
본 게시글은 혼자 공부하는 자바 (저자 : 신용권)의 책과 유튜브 영상을 참고하였고, 개인적으로 정리하는 글임을 알립니다. 접근 제한자 접근 제한자는 말 그대로 접근을 제한하기 위해 사용됨 여기서 접근이란 클래스 및 인터페이스 그리고 이들이 가지고 있는 멤버의 접근을 말한다. 어떤 경우에 클래스와 인터페이스를 다른 패키지에서 사용하지 못하도록 막을 필요가 있다. 그리고 객체 생성을 막기 위해 생성자를 호출하지 못하게 하거나 필드나 메소드를 사용하지 못하도록 막아야 되는 경우도 있다. 이때 접근 제한자를 사용할 수 있다. public 접근 제한자 : 외부 클래스가 자유롭게 사용할 수 있도록 함 protected 접근 제한자 : 같은 패키지 또는 자식 클래스에서 사용할 수 있도록 함 private 접근 제한..
![[JAVA] 패키지(Package)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9stmK%2FbtrUXnUCK9O%2FvWfOB1j1euXdOCw4Unhkbk%2Fimg.jpg)
본 게시글은 혼자 공부하는 자바 (저자 : 신용권)의 책과 유튜브 영상을 참고하였고, 개인적으로 정리하는 글임을 알립니다. 프로젝트를 개발하다 보면 적게는 수십 개, 많게는 수백 개의 클래스를 작성해야 한다. 클래스를 체계적으로 관리하지 않으면 클래스 간의 관계가 뒤엉켜서 복잡하고 난해한 프로그램이 되어 결국 유지 보수가 어렵다. 자바에서는 클래스를 체계적으로 관리하기 위해 패키지를 사용한다. 패키지의 물리적인 형태는 파일 시스템의 폴더이다. 패키지는 단순히 파일 시스템의 폴더 기능만 하는 것이 아니라 클래스의 일부분으로, 클래스를 유일하게 만들어주는 식별자 역할을 한다. 클래스 이름이 동일하더라도 패키지가 다르면 다른 클래스로 인식한다. 클래스의 전체 이름은 '패키지 이름 + 클래스 이름'인데 패키지가..
![[JAVA] 싱글톤(Singleton), final 필드와 상수](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFtIyh%2FbtrUTJ38smT%2FGuJo4niMrgKoDY7Mm5NpzK%2Fimg.jpg)
본 게시글은 혼자 공부하는 자바 (저자 : 신용권)의 책과 유튜브 영상을 참고하였고, 개인적으로 정리하는 글임을 알립니다. 싱글톤 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우가 있다. 단 하나만 생성된다고 해서 이 객체를 싱글톤이라고 한다. 싱글톤을 만들려면 클래스 외부에서 new 연산자로 생성자 호출을 막아야 한다. 생성자를 외부에서 호출할 수 없도록 하려면 private 접근 제한자를 붙여주면 된다. 생성자를 private으로 접근을 제한했더라도, 클래스 내부에서는 생성자 호출이 가능하다. 싱글톤을 만드는 방법은 다음과 같다. 정적 필드로 자신 타입의 객체를 생성하고 private로 외부 접근을 제한한다. 생성자를 private를 이용하여 외부 접근을 제한한다. 정적 메소드를 선언하고 ..
![[JAVA] 인스턴스 멤버와 정적 멤버](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbp2FY5%2FbtrURpZrEPE%2FDjERfalONqPeCRvKaT1Mr0%2Fimg.jpg)
혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다. 객체마다 필드값이 달라야 한다면 해당 필드는 객체마다 가지고 있는 것이 맞다. 하지만 객체의 필드값이 모두 같아야 한다면 이 필드를 객체마다 가지고 있을 필요가 있을지 의문이 든다. 만약 객체마다 갖고 있다면 메모리가 낭비되며, 모든 객체의 필드값을 같게 맞추는 추가적인 작업이 필요할 수도 있다. 오히려 이런 필드는 한 곳에 위치시키고 객체들이 공유하는 것이 좋을 수 있다. 자바는 이런 경우를 위해 클래스 멤버를 인스턴스 멤버와 정적 멤버로 구분해서 선언할 수 있도록 하고 있다. 인스턴스 멤버는 객체마다 가지고 있는 멤버를 말하고, 정적 멤버는 클래스에 위치시키고 객체들이 공유하는 멤버를 말한다. 인스턴스 멤버와 thi..
![[JAVA] 메소드(Method)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg9W2c%2FbtrUL8D0Aic%2FBhFAZt2GiYw28PmEQv2Dok%2Fimg.jpg)
혼자 공부하는 자바 (저자 : 신용권)의 내용을 개인적으로 정리하는 글임을 알립니다. 메소드 선언은 선언부와 실행 블록으로 구성된다. 메소드 선언부를 메소드 시그니처라고 한다. 메소드 시그니처에는 리턴타입, 메소드 이름, 매개 변수 선언이 온다. 메소드 선언 리턴 타입 리턴 타입은 있을 수도 있고 없을 수도 있다. 리턴 타입이 없다면 void라고 명시하면 되고, 리턴 타입이 있다면 해당 타입을 명시하면 된다. 리턴 타입이 있다면 반드시 리턴 값을 리턴해야 한다. 리턴 값을 담는 변수와 리턴 값이 자동으로 형변환이 된다면 타입이 달라도 상관이 없다. 메소드 이름 메소드 이름은 자바 식별자 규칙에 맞게 작성하면 된다. 관례적으로 메소드 이름은 소문자로 작성한다. 서로 다른 단어가 혼합된 이름이라면 뒤이어 오..