반응형

JAVA 55

[Java] 접근제한자(Access Modifier)

/* * 접근제한자 : 멤버에 대한 접근 범위를 제한자는 키워드 * (좁음) private - default - protected - public (넓음) * 1. public : 모든 패키지의 모든 클래스에서 접근 가능(= 누구나) * 2. protected : 같은 패키지이거나 다른 패키지의 서브클래스에서 접근 가능 * 3. default : 같은 패키지에서만 접근 가능(= 다른 패키지에서 접근 불가) * 4. private : 자신의 클래스에서만 접근 가능(= 다른 클래스에서 접근 불가) */ package access_modifier_p1; public class ParentClass { // 접근제한자에 따른 접근 범위 차이 public int publicVar; protected int pro..

JAVA 2021.10.31

[Java] 메서드 오버라이딩(메서드 재정의)

/* * 메서드 오버라이딩(Method Overriding) = 메서드 재정의 * - 슈퍼클래스로부터 상속받은 메서드를 서브클래스에서 재정의 하는 것 * - 기존 슈퍼클래스의 메서드와 동일하게 생긴 메서드를 정의하게 되므로 * 서브클래스에서는 더 이상 슈퍼클래스의 메서드가 보이지 않음 * => 슈퍼클래스의 메서드를 덮어쓰기 때문에 자신의 메서드만 보이게 됨 * (= 슈퍼클래스의 메서드는 은닉됨) * - 슈퍼클래스의 메서드에 새로운 기능을 추가하는 등 * 기존에 상속된 메서드 내용을 변경하는 경우 사용 * * * 1. 상속 관계 필수 * 2. 메서드 시그니쳐(메서드명, 리턴타입, 파라미터)가 일치해야함 * => 단, 리턴타입은 부모와 같거나 서브클래스 타입으로 변경 가능 * 3. 접..

JAVA 2021.10.30

[Java] 상속 기본 개념 복습

public class Ex { public static void main(String[] args) { //상속 기본 개념 복습 //SpiderMan s = new SpiderMan(); //s.name = "스파이더맨"; // Person 클래스로부터 상속받은 멤버변수 SpiderMan s = new SpiderMan("스파이더맨",16, false, true); s.eat(); // Person 클래스로부터 상속받은 메서드 s.jump(); // Person 클래스로부터 상속받은 메서드 s.fireWeb(); } } class Person { String name; int age; boolean isHungry; public Person() { System.out.println("Person() 생..

JAVA 2021.10.30

[Java] 상속 연습

public class Test2 { public static void main(String[] args) { Manager m = new Manager("홍길동",1000,"개발팀"); System.out.println(m.getManager()); } } /* * 직원(Employee) 클래스 * 멤버변수 * - 직원이름(name, 문자열) * - 연봉(salary, 정수) * 메서드 * - 직원 정보를 문자열로 결합하여 리턴하는 getEmployee() 메서드 정의 * (파라미터 없음, 리턴값 있음) * => 직원이름과 연봉을 문자열로 결합하여 리턴 */ class Employee { String name; int salary; public String getEmployee() { return na..

JAVA 2021.10.30

[Java] 상속에서의 생성자

/* * 상속에서의 생성자 * - 생성자 : 클래스명과 이름이 같고 리턴타입이 없는 메서드의 일종 * - 생성자는 상속되지 않음 * => 상속받을 경우 자신의 클래스 이름과 생성자 이름이 다르기 때문에 * 생성자 정의 규칙을 위반하게 됨 * - 상속 관계에서 인스턴스를 생성할 때 * 서브클래스의 인스턴스가 생성되기 전 슈퍼클래스의 인스턴스를 * 먼저 생성한 후 서브클래스의 인스턴스를 생성함 * => 서브클래스의 생성자가 호출되면 가장 먼저 * 슈퍼클래스의 생성자를 호출하여 슈퍼클래스의 인스턴스를 생성하고 * 그 후에 서브클래스의 인스턴스가 생성되어 생성자 코드가 실행됨 */ public class Ex4 { public static void main(String[] args) { //상속에서의 생성자 M..

JAVA 2021.10.30

[Java] has-a 관계(포함) vs is-a 관계(상속)

/* * has-a 관계(포함) vs is-a 관계(상속) * 1. has-a 관계(포함) * - A has a B = A 가 B 를 포함한다 로 표현 가능한 관계 * - 가장 일반적인 객체간의 관계 * - 특정 클래스 내에서 다른 클래스의 인스턴스를 생성하여 * 해당 인스턴스를 다루는 관계 * - 예) 자동차 - 엔진, 스마트폰 - 카메라 * * 2. is-a 관계(상속) * - A is a B = A 는 B 이다 로 표현 가능한 관계 * - 특정 클래스가 다른 클래스를 상속받아 * 해당 클래스의 멤버를 선언없이 다루는 관계 * - 예) 자동차 - 소방차, 핸드폰 - 스마트폰 */ public class Ex3 { public static void main(String[] args) { } } clas..

JAVA 2021.10.30

[Java] 상속의 장점

public class Ex2 { public static void main(String[] args) { /* * 상속의 장점 * 1. 코드 재사용성이 증가 * 2. 코드의 유지보수성이 용이해짐 */ Point3D p3 = new Point3D(); p3.print3D(); } } //2차원 좌표(x, y)를 관리하는 Point2D 클래스 class Point2D { int x = 10; int y = 20; // 2차원 좌표값을 출력하는 print2D() 메서드 정의 public void print2D() { System.out.println("x좌표 = " + x + ", y좌표 = " + y); // 슈퍼클래스의 메서드를 수정하게 되면 // 서브클래스인 Point3D 클래스에서 수정 내용에 대한 ..

JAVA 2021.10.29

[Java] 상속(Inheritance)

/* * 상속(Inheritance) * - is-a 관계가 성립하는 객체간의 관계 * - 슈퍼클래스(부모)의 모든 멤버를 서브클래스(자식)에서 물려받아 * 선언없이 사용하는 것 * - 슈퍼클래스(Super class) = 부모클래스 = 상위클래스 = 조상클래스 * 서브클래스(Sub class) = 자식클래스 = 하위클래스 = 자손클래스 * - private 접근제한자가 지정된 멤버는 상속 대상에서 제외됨 * - 생성자는 상속 대상에서 제외됨 * => 생성자의 이름은 자신의 클래스 이름이어야하지만 * 상속받은 생성자는 부모의 클래스 이름이므로 규칙에 위배되기 때문 * - 자바는 단일 상속만 지원 * => 두 개 이상의 슈퍼클래스(부모)를 지정할 수 없음 * - 별도로 상속 대상을 지정하지 않을 경우(ex..

JAVA 2021.10.29

[Java] 싱글톤 디자인 패턴

/* * 싱글톤 디자인 패턴(Singleton Design Pattern) * - 단 하나의 유일한 인스턴스만을 생성하여 공유하도록 하는 기법 * - 외부에서 인스턴스 생성을 하지 못하도록 차단하고 * 클래스 내에서 직접 인스턴스를 생성 후 외부로 리턴하는 기법 * - 누구나 단 하나의 인스턴스만을 공유하여 사용해야함 * (=> 즉, 외부에서 new 를 통한 새 인스턴스 생성 불가능) * * * 1. 외부에서 인스턴스 생성이 불가능하도록 * 생성자에 private 접근제한자를 선언하여 정의 * 2. 자신의 클래스에서 직접 인스턴스를 생성하여 참조변수에 저장 * => 외부에서 인스턴스 생성없이도 접근 가능하도록 static 키워드 사용 * => 외부에서 함부로 접근하지 못하도록 priva..

JAVA 2021.10.29

[Java] static 메서드

/* * static 메서드(= 정적 메서드) * - 메서드 정의 시 리턴타입 앞에 static 키워드를 붙여서 정의 * - 클래스가 메모리에 로딩될 때 static 변수와 함께 메모리에 로딩되므로 * 인스턴스 생성과 무관 * - 클래스명만으로 접근 가능(클래스명.메서드명() 형태로 호출) * * * - 인스턴스 생성 시점에서 생성되는 것은 static 메서드 내에서 접근 불가 * 1. 인스턴스 변수 사용 불가 * => 원인 : static 메서드가 로딩되는 시점은 클래스 로딩 시점이며 * 인스턴스 변수는 인스턴스 생성 시점에 로딩되므로 * static 메서드가 로딩되는 시점에서는 존재하지 않는다! * 2. 레퍼런스 this 또는 super 사용 불가 * =..

JAVA 2021.10.29
반응형