본문 바로가기

전체 글

(141)
오버라이딩(Overriding)과 다형성(Polymorphism) ※ 오버라이딩 하는 이유: 부모쪽의 기능이 상속받기엔 적절하지 않아서 그 기능을 재정의한다. 오버라이딩은 상속 관계에서 사용되며, 부모 클래스에 정의된 메서드를 자식 클래스에서 재정의하는 것. 부모 클래스의 메서드와 메서드 시그니처가 동일해야 하며, 자식 클래스에서 오버라이딩된 메서드는 부모 클래스의 메서드를 가리게 되며, 동일한 메서드 호출 시 자식 클래스의 오버라이딩된 메서드가 실행. 오버라이딩은 다형성의 일부로, 런타임 시에 메서드의 동작이 결정. class Animal { void makeSound() { System.out.println("Animal makes a sound"); } } class Cat extends Animal { void makeSound() { System.out.pri..
상속 예제 class ParentsVariable1{ int a; void pm1() { System.out.println("ParentsVariable1의 a=" + a); } } class ParentsVariable2 extends ParentsVariable1 { void pm2() { System.out.println("ParentsVariable2의 a=" + a); } } class ChildVariable extends ParentsVariable2 { String a; void cm() { //System.out.println("ChildVariable의 a=" + a); //= System.out.println("ChildVariable의 a=" + this.a); System.out.printl..
상속(Inheritance) ※ 상속은 클래스 간에 계층 구조를 형성하여 속성과 메서드를 공유하고 재사용하는 개념 부모 클래스(상위 클래스)의 속성과 메서드를 자식 클래스(하위 클래스)가 물려받아 사용할 수 있도록 합니다. class Vehicle { // 부모 클래스의 속성과 메서드 정의 } class Car extends Vehicle { // 자식 클래스에서 추가적인 속성과 메서드 정의 } ssn : 주민번호 자식 IS A 부모 (kind of) 자식은 부모의 한 종류이다라는 관계가 논리적으로 성립이 되어야함. ex) 고객 is a 사람 ○ 사람이다/사람의 한 종류이다 사원 is a 사람 ○ 계좌 is a 사람 X 계좌 HAS A 사람 관계가 성립되어야함 부모-자식 관계가 성립되면 부모 쪽 함부로 변경하면 안됨. 자식도 함께 ..
싱글톤 ※ 싱글톤 패턴 : 그 타입의 객체는 하나, 객체 하나만 참조하게. 자기 클래스에선 사용 가능 cf) Constructor summary 없는 건, new 키워드로 객체 생성 X, 클래스 이름 . 으로 시작함 ex) new Math X / Math.random() ○ //제공자 코드 class Single{ private static Single s = new Single();// 자동 초기화는 null인데 명시적 초기화 new Single() 또 된다 private Single() { } static Single getInstance() {// return 타입 Single //return null; //return new Single();// getInstance 메서드 호출될 때마다 새로운 객체 생..
패키지 ※ default package - 논리적으로 구분해놓은 단위(물리적인 단위X, 실제로는 존재하지 않는다) package 나눠져도 소스코드에는 아무 의미 없다 /*import world.asia.Korea; import world.asia.Japan; */ import world.asia.*;// 위의 2줄을 이렇게 한줄로도 가능하나, 가독성이 떨어져서 권장하지 않음 // world.asia의 korea인지 world.europe의 korea인지 구분이 안되서 //import world.*.*;// 이건 compile 에러 발생. 쓰면 안된다. import world.europe.France; public class CountryTest { public static void main(String[] ar..
Product 예제 1 import com.my.product.dao.ProductDAO; import com.my.product.dto.Product; public class ProductUser { java.util.Scanner sc = new java.util.Scanner(System.in); // non-static 변수는 객체가 생성될 때 메모리에 할당된다 그래서 ProductUser user = new ProductUser(); 해줬음 ProductDAO dao = new ProductDAO(); // 추가가 안된 상태에서 코드를 확인하려면 검색부터 해야한다. void findAll() { //ProductDAO dao = new ProductDAO(); // 저장소가 findAll과 findByProdNo 각각..
오버로드(Overload) ※ 오버로딩 (Overloading): 오버로딩은 같은 메서드 이름을 가지고 매개변수의 개수나 타입을 다르게 하여 다양한 형태의 메서드를 정의하는 것 오버로딩된 메서드들은 같은 이름으로 호출되지만, 전달되는 인자에 따라 매개변수가 다른 버전의 메서드가 호출. 오버로딩은 메서드의 시그니처가 다르기 때문에 반환 타입이나 접근 제어자는 오버로딩에 영향을 주지 않는다. 상속과 관련 없이 하나의 클래스 내에서 메서드를 정의할 때 사용. ※ 메서드 이름 동일 매개변수의 갯수가 다르거나 자료형이 다르거나 순서가 달라야 한다. 리턴 타입은 아무 상관 없다 class Calculator { int add(int a, int b) { return a + b; } double add(double a, double b) { ..
접근제어자(Access Modifier) ※ 개발자 A가 개발한 코드의 멤버변수, 저장소 이름 등을 다수의 사람들이 쓰기 때문에 데이터의 안정성 보장을 위해 개발자 B가 접근하지 못하도록 할 필요가 있다. → 접근제한자를 설정한다 접근제어자(Access Modifier) 선언위치 (ㅇㅇㅇ앞) 클래스 멤버변수 메서드 public 누구나 접근 가능 ○ ○ ○ protected 동일패키지, 다른패키지의 하위클래스에서 접근 가능 ○ ○ default(package) 동일패키지에서 접근 가능, 잘 사용은 하지 않는다. ○ ○ ○ private 자기 클래스에서 접근 가능 ○ ○ : 접근제어자 아무것도 안붙은 상태 = default 상태. proteced : 동일패키지, 다른 패키지의 하위클래스에서 접근 가능(동일 패키지 또는 자식이면 접근 가능) 제공은 ..