다형성(polymorphism) 하나의 코드가 여러 자료형으로 구현되어 실행되는 것이다. - 같은 코드에서 여러 다른 실행 결과가 나온다. - 정보 은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나이다. - 다형성을 잘 활용하면 유연하고 확장성 있고 유지보수가 편리한 프로그램을 만들 수 있다. 다형성의 예 class Animal{ public void move() { System.out.println("동물이 움직입니다."); } public void eating() { } } class Human extends Animal{ public void move() { System.out.println("사람이 두발로 걷습니다."); } public void readBooks() { Syste..
🍞 Back-End
클래스 상속 (inheritance) - 새로운 클래스를 정의할 때 이미 구현된 클래스를 상속(inheritance) 받아서 속성이나 기능을 확장하여 클래스를 구현한다. - 이미 구현된 클래스보다 더 구체적인 기능을 가진 클래스를 구현해야 할 때 기존 클래스를 상속한다. 상속하는 클래스: 상위 클래스, parent class, base class, super class 상속받는 클래스: 하위 클래스, child class, derived class, sub class - 상속의 문법 class B extends A {} - extends 키워드 뒤에는 단 하나의 클래스만 올 수 있다. - 자바는 단일 상속(single inheritance)만을 지원한다. 상속을 구현하는 경우 - 상위 클래스는 하위 클래..
객체 배열 선언과 구현 기본 자료형 배열은 선언과 동시에 배열의 크기만큼의 메모리가 할당되지만 객체 배열의 경우엔 요소가 되는 객체의 주소가 들어갈(4바이트, 8바이트) 메모리만 할당되고(null) 각 요소 객체는 생성하여 저장해야 한다. Book.java public class Book { private String title; private String author; public Book() {} public Book(String title, String author) { this.title = title; this.author = author; } public String getTitle() { return title; } public void setTitle(String title) { this...
- 동일한 자료형의 순차적 구조 - 인덱스 연산자[]를 이용하여 빠른 참조가 가능 - 물리적 위치와 논리적 위치가 동일 - 배열의 순서는 0부터 시작 - 자바에서는 객체 배열을 구현한 ArrayList를 많이 활용함 배열 선언과 초기화 - 배열 선언하기 int[] arr1 = new int[10]; int arr2[] = new int[10]; - 배열 초기화 하기 배열은 선언과 동시에 자료형에 따라 초기화된다(정수는 0, 실수는 0.0, 객체는 null) 필요에 따라 초기값을 지정할 수 있다. int[] numbers = new int[] {10, 20, 30}; // 개수 생략해야 함 int[] numbers = {10, 20, 30}; // new int[] 생략 가능 int[] idx; idx =..
싱글톤 패턴 - 프로그램에서 인스턴스가 단 한 개만 생성되어야 하는 경우 사용하는 디자인 패턴 - static 변수, 메서드를 활용하여 구현할 수 있음 싱글톤 패턴으로 회사 객체 구현하기 - 클래스 내부에 유일한 private 인스턴스 생성 유일한 객체 Company private static Company instance = new Company(); - 생성자는 private으로 선언 Company를 마음대로 new 할 수 없도록 private Company() {} - 외부에서 유일한 인스턴스를 참조할 수 있는 public 메서드 제공 public static Company getInstance() { if(instance == null) { // 방어 코드 instance = new Company..
static 메서드의 구현과 활용, 변수의 유효 범위 공통으로 사용하는 변수가 필요한 경우 - 여러 인스턴스가 공유하는 기준 값이 필요한 경우 - 학생마다 새로운 학번 생성 - 카드회사에서 카드를 새로 발급할 때마다 새로운 카드 번호를 부여 - 회사에 사원이 입사할 때마다 새로운 사번이 필요한 경우 static 변수 선언과 사용하기 static int serialNum; - 인스턴스가 생성될 때 만들어지는 변수가 아닌, 처음 프로그램이 메모리에 로딩될 때 메모리를 할당 - 클래스 변수, 정적 변수라고도 함(vs. 인스턴스 변수) - 인스턴스 생성과 상관없이 사용 가능하므로 클래스 이름으로 직접 참조 Student.serialNum = 100; static 변수 테스트하기 Employee.java publ..
참조 자료형 - 변수의 자료형 - 클래스형으로 변수를 선언 - 기본 자료형은 사용하는 메모리의 크기가 정해져 있지만, 참조 자료형은 클래스에 따라 다름 - 참조 자료형은 사용할 때는 해당 변수에 대해 생성해야 함 - (String 클래스는 예외적으로 생성하지 않고 사용할 수 있음) 참조 자료형 정의하여 사용하기 - 학생이 수강한 과목들에 대한 성적을 산출하기 위한 경우 학생 클래스 속성에 과목이 모두 있으면 불합리 - 학생(Student)과 과목(Subject)에 대한 클래스를 분리하여 사용하고 Subject 클래스를 활용하여 수강한 과목들의 변수의 타입으로 선언 - 선언된 Subject 변수는 생성된 인스턴스가 아니므로, Student의 생성자에서 생성하여 사용 멤버 변수의 참조 자료형을 만들어서 ne..
접근 제어 지시자 (access modifier) 클래스 외부에서 클래스의 멤버 변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드 - private 같은 클래스 내부에서만 접근 가능(외부 클래스, 상속 관계의 클래스에서도 접근 불가) - default(아무것도 없음) 같은 패키지 내부에서만 접근 가능(상속 관계라도 패키지가 다르면 접근 불가) - protected 같은 패키지나 상속관계의 클래스에서 접근 가능하고 그 외 외부에서는 접근할 수 없다. - public 클래스의 외부 어디서나 접근할 수 있다. get()/set() 메서드 - private으로 선언된 멤버 변수(필드)에 대해 접근, 수정할 수 있는 메서드를 public으로 제공한다. - get() 메서드만 제공되는 경우 read..
- 객체를 생성할 때 new 키워드와 함께 사용 - new Student(); - 생성자는 일반 함수처럼 기능을 호출하는 것이 아니고 객체를 생성하기 위해 new와 함께 호출됨 - 객체가 생성될 때 변수나 상수를 초기화하거나 다른 초기화 기능을 수행하는 메서드를 호출함 - 생성자는 반환 값이 없고, 클래스의 이름과 동일 - 대부분의 생성자는 외부에서 접근 가능하지만, 필요에 의해 private으로 선언되는 경우도 있음 기본 생성자 (default constructor) - 클래스에는 반드시 적어도 하나 이상의 생성자가 존재 - 클래스에 생성자를 구현하지 않아도 new 키워드와 함께 생성자를 호출할 수 있음 - 클래스에 생성자가 하나도 없는 경우 컴파일러가 생성자 코드를 넣어줌 - public Studen..
this가 하는 일 - 인스턴스 자신의 메모리를 가리킴 - 생성자에서 또 다른 생성자를 호출할 때 사용 - 자신의 주소(참조값)를 반환함 생성된 인스턴스 메모리의 주소를 가짐 클래스 내에서 참조 변수가 가지는 주소 값과 동일한 주소 값을 가지는 키워드 public void setYear(int year) { this.year = year; } 생성자에서 다른 생성자를 호출하는 this - 클래스에 생성자가 여러 개인 경우, this를 이용하여 생성자에서 다른 생성자를 호출할 수 있음 - 생성자에서 다른 생성자를 호출하는 경우, 인스턴스의 생성이 완전하지 않은 상태이므로 this() statement 이전에 다른 statement를 쓸 수 없음 public class Person { String name;..