반응형 프로그래밍언어/Java14 [Java] : 인터페이스, interface 인터페이스의 개념 인터페이스는 추상 클래스와 마찬가지로 직접 인스턴스를 생성할 수 없다는 특징을 가지고 있다. 또, 인터페이스는 일반 메서드와 생성자를 가질 수 없고, 필드 또한 static final을 붙인 상수화된 필드만 사용할 수 있으며 반드시 초기화를 해야 한다는 특징이 있다. interface 인터페이스명 { static final 필드 및 추상 메서드 정의 } 인터페이스는 코드로 보면 이런 형식을 가지고 있고 추상 클래스와 비슷하지만 다중 상속을 위해 사용하기도 한다. 또, 인터페이스는 상속을 받기 위해 extends 대신에 implements 키워드를 사용한다. interface TestCarSetting { static final int CAR_COUNT = 0; abstract void .. 2022. 1. 17. [Java] : 추상 클래스, abstract class란? 추상 클래스란? 추상 클래스는 직접 인스턴스를 생성할 수 없는 클래스이다. 추상 클래스를 사용하기 위해서는 자식 클래스에서 추상 클래스를 상속 받고 자식 클래스의 인스턴스를 생성해야 한다. 추상 클래스를 만들기 위해서는 abstract 키워드를 앞에 붙여줘서 사용하면 된다. 예시 코드 abstract class CarSetting{ int speed = 0; String color; void upSpeed(int speed) { this.speed += speed; } } 먼저 abstract를 붙여 추상화 클래스를 만들어준다. 추상화 클래스에 speed와 color을 선언, 초기화 해주고 upSpeed()메서드를 만들어 준다. class Sedan extends CarSetting { } Sedan은 .. 2022. 1. 17. [Java] : 오버라이딩을 제한하는 final 오버라이딩을 제한하는 final 부모 클래스의 메서드 오버라이딩을 막기 위해 메서드 앞에 final 키워드를 붙여 사용한다. final이 붙은 메서드는 자식 클래스에서 오버라이딩을 할 수 없고 부모 클래스에서 정의한 대로 사용해야 한다. 주로 static과 함께 클래스 변수를 상수처럼 지정하는 데 사용된다. 즉, final이 붙은 필드와 메서드는 말 그대로 마지막이 되므로 상속이 불가능하고 마지막 변수 값을 갖기 때문에 값의 수정이 불가능하게 된다. 예시 코드 class TestCarSetting { int testCarSettingSpeed = 0; final void upSpeed(int testCarSettingSpeed) { this.testCarSettingSpeed += testCarSetti.. 2022. 1. 17. [Java] : method overriding 메서드 오버라이딩 메서드 오버라이딩은 상위 클래스의 메서드를 하위 클래스에서 재정의 하는 것을 말한다. 예시 코드 class ToyPenSetting { String color = "Red"; void changeColor(String color) { this.color = color; System.out.println("장난감 연필의 색상 (부모 클래스) => " + this.color); } } ToyPenSetting 클래스는 부모 클래스이다. 펜의 색상을 Red로 초기화 시켜놓고 changeColor라는 색상을 바꿔주는 메서드를 만들어 줬다. class TestPen1 extends ToyPenSetting{ void changeColor(String color) { this.color = col.. 2022. 1. 17. [Java] : 상속을 허용하는 protected 상속을 허용하는 protected protected는 public과 다르게 같은 패키지와 클래스에서만 접근할 수 있다. 예시 코드 class RcCarSetting { protected String color; int speed; private를 공부할 떄 만든 코드를 조금 변형했다. color을 protected로 지정해 줬다. class RcSedan extends RcCarSetting { void setSpeed(int speed) { this.speed = speed; } void setColor(String color) { this.color = color; } } RcSedan 클래스에서 speed와 color의 set 메서드를 만들어줬다. public class RcCar { public .. 2022. 1. 17. [Java] : 상속을 제한하는 private private 부모 클래스의 필드와 메서드는 서브 클래스에 상속되지만 상속을 원하지 않는 경우에는 private 접근 제한자를 사용해 주면 된다. private로 지정된 필드나 메서드는 자식 클래스로 상속되지 않게 된다. 예시 코드 class RcCarSetting { private String color; int speed; } RcSetting에 color을 private 접근 제한자로 지정하고, speed는 따로 지정을 하지 않았다. class RcSedan extends RcCarSetting { void setSpeed(int speed) { this.speed = speed; } //오류 코드 void setColor(String color) { this.color = color; } } Rc.. 2022. 1. 17. [Java] : 여러 개의 생성자가 있을 때 부모 클래스의 생성자 호출 여러 개의 생성자가 있을 때 부모 클래스의 생성자 호출 파라미터만 다르면 생성자를 여러 개 만들 수 있다. 이번에는 부모 클래스의 생성자가 여러개 있을 때 호출 순서와 강제로 부모 클래스를 호출하는 supoer() 메소드에 대해 공부한다. 코드 class ToCarSetting { ToCarSetting() { System.out.println("부모 클래스 생성자 호출 (파라미터 없음)"); } ToCarSetting(String str) { System.out.println("부모 클래스 생성자 호출 => " + str); } } 먼저 부모 클래스에서 파라미터 값이 없는 생성자와 파라미터 값이 있는 생성자를 만들어준다. class ToySedan extends ToCarSetting { ToySeda.. 2022. 1. 17. [Java] : 생성자 상속의 순서 생성자 상속의 순서 부모 클래스와 자식 클래스 상속의 순서는 부모 클래스가 우선 실행이 되고 자식 클래스가 나중에 실행이 된다. 코드 예시 public class Hi { public static void main(String[] args) { // 자식 클래스의 인스턴스 생성 후 실행 JuHyeon juHyeon = new JuHyeon(); } } // 부모 클래스 생성 및 부모 클래스 생성자 Oh 생성 class Oh { Oh() { System.out.println("부모 클래스 : Oh 호출"); } } // 자식 클래스 생성 및 자식 클래스 생성자 JuHyeon 생성 class JuHyeon extends Oh { JuHyeon() { System.out.println("자식 클래스 : JuH.. 2022. 1. 16. [Java] : 상속 개념과 예시 상속 상속은 기존 클래스가 가지고 있는 필드와 메서드를 그대로 물려받은 새로운 클래스를 만드는 것을 말한다. 필요에 따라 추가로 필드나 메서드를 추가해서 만들어도 된다. 개념 class 샤프 { 필드 : 케이스, 샤프심 메서드 : 심 넣기() 메서드 : 심 뺴기() 메서드 : 지우개로 지우기() } class 볼펜 { 필드 : 케이스, 볼펜심 메서드 : 심 넣기() 메서드 : 심 뺴기() 메서드 : 수정 테이프로 지우기() } 샤프 클래스와 볼펜 클래스가 있다고 가정할 때 필드와 메서드에서 공통적인 부분은 케이스와 심 넣기, 빼기가 있고 다른 점은 필드의 샤프심이냐, 볼펜심이냐와 메서드의 지우개로 지우냐와 수정 테이프로 지우냐가 다르다. class 필기구 { 필드 : 케이스 메서드 : 심 넣기() 메서드.. 2022. 1. 16. [Java] : 인스턴스 변수와 클래스 변수 인스턴스 변수와 클래스 변수 인스턴스 변수는 인스턴스를 생성을 하고 난 뒤에 사용할 수 있는 변수들을 말한다. class pen { String color; int number; } color과 number 인스턴스 변수는 클래스 안에 존재하지만 실제 공간이 할당되진 않는다. pen pen = new pen(); pen에 대한 인스턴스를 생성했다. 이러면 이제 pen의 color과 number를 지정할 수 있게 되는데 이렇게 되야 인스턴스 변수의 공간이 할당되게 된다. 공부하는 책에서는 이런 과정을 설계도와 결과물로 설명을 하였는데 클래스를 설계도로 보고 있고 인스턴스를 결과물로 보고 있다. pen 클래스에서 변수를 선언했지만 = 설계도를 작성했지만 공간이 할당 되진 않았다. = pen의 실체는 없다. .. 2022. 1. 15. [Java] : Overloading이란? Overloading이란? 오버로딩은 클래스 내에서 메소드 이름이 같아도 파라미터의 개수나 데이터 형식만 다르면 여러 개를 선언할 수 있는 것을 말한다. 참고로, 생성자도 메소드의 한 종류이므로 오버로딩이 가능하다. Overloading 코딩 class CarSetting { //필드 private String color; private int speed; CarSetting(){ } CarSetting(String color) { this.color = color; } CarSetting(String color, int speed) { this.color = color; this.speed = speed; } public String getColor() { return color; } public in.. 2022. 1. 15. [Java] : 파라미터가 있는 생성자 활용하기 파라미터가 있는 생성자를 활용하기 생성자도 다른 메소드와 같이 파라미터를 사용할 수 있다. 파라미터가 있는 생성자를 활용해서 인스턴스 생성시 초기 값을 파라미터로 넘겨 설정하는 코딩을 한다. NoteSetting myNote1 = new NoteSetting(); myNote1.color = "Blue"; myNote1.page = 0; 기존에는 이렇게 인스턴스 생성을 하고 값을 따로 추가로 담아줬다. 이렇게 하면 만약 인스턴스를 여러개를 생성해 줘야 하는 상황이 오면 일일이 지정을 해서 값을 담아줘야 하기 때문에 코드가 길어질 수 있다. 이것을 파라미터가 있는 생성자를 통해 보완해서 사용할 수 있는데 아래 코드를 확인해 보자. class PenSetting { // 필드 private String co.. 2022. 1. 15. [Java] : private와 public에 대해서 private와 public class NoteSetting { //노트 필드 private int index = 0; //노트의 인덱스 // 노트 인덱스를 올린다. public void upIndex(int value) { if (index + value > 200){ index = 200; } else { index += value; } System.out.println("노트의 인덱스 번호는 " + getIndex() + "입니다."); } // 노트 인덱스를 줄인다. public void downIndex(int value) { if (index - value > 0){ index = 0; } else { index -= value; } System.out.println("노트의 인덱스 번호는 ".. 2022. 1. 14. [Java] : Class와 인스턴스 생성 및 호출 Class와 인스턴스 생성 및 호출 Class란? 클래스는 설계도, 인스턴스(객체)는 설계도를 통해 만든 물건과 같다고 볼 수 있다. Class 형태 public class Name { } publci 접근 제한자를 활용한 Name 클래스이다. 클래스는 이런 형태를 가지고 있다. 실습 class NoteSetting { //노트 필드 String color; //노트 색상 int page; // 노트 장 수 // 노트 장 수 증가 void upPage(int value) { page += value; } // 노트 장 수 감소 void downPage(int value) { page -= value; } } 노트 클래스를 완성했다. 노트의 설계도를 만든 것과 같다. 이제 노트의 설계도를 통해 노트를 만들.. 2022. 1. 14. 이전 1 다음 반응형