목록분류 전체보기 (94)
우주코딩
레퍼런스 변수의 데이터크기 앞의 어떤 데이터 타입의 주소를 저장할 지 상관 없이 레퍼런스의 메모리크기는 4byte로 동일하다. 주소를 저장할 수 있는 크기 4byte 혹은 8byte가 있을 수 있다. 하지만 특별한 경우가 없으면 레퍼런스의 크기는 4byte 이다. 타입 별 레퍼런스의 크기 Vehicle - maker Car - model /Vehicle 상속 Sedan -auto /Car상속 Truck - weight /Car상속 Vehicle v; Car c; Sedan s; Truck t; 타입에 상관없이 레퍼런스 변수의 크기는 4바이트로 같다. 주소를 저장하는 변수이기 때문이다. 타입별 인스턴스 크기 타입(클래스, 인터페이스, 배열) new Car(); 수퍼클래스의 인스턴스 변수 생성 maker 해..
프로젝트 - composite 디자인 패턴 컴포지트 패턴 : 객체들의 관계를 트리구조로 구성하여 부분-전체 계층을 표현하는 패턴이다. 08- a 사용자가 직접 명령어를 입력하는 대신에 메뉴를 통해 명령을 실행하도록 변경 composite 패턴 적용 전 composite 디자인 패턴의 용도와 실행 원리를 이해한다. 08- b composite 패턴 적용 후 tree 구조를 갖는 객체를 다룰 때 유용한 설계구도 'component' 역할을 정의한다. 직접 사용할 클래스가 아니기 때문에, 추상클래스로 정의 execute(): 서브 클래스에서 재정의해야하기 때문에, 추상 메서드로 선언 'composite' 역할을 정의한다. MenuGroup 클래스 추가 execute() 구현: 메뉴를 출력하고 사용자로부터 번호..
접근 권한 private : 클래스 안에서만 접근 가능 (default) : private + 같은 패키지 소속 protected : (default) + 서브 클래스로 만든 변수인 경우 서브 클래스에서 접근 가능 public : 모두 접근 가능 factory-method 생성자를 private으로 선언하면 외부에서 이 클래스의 인스턴스를 생성하는 것을 막을 수 있다. private Car() {} 예(1) 인스턴스 생성과정이 복잡할 경우에 직접 인스턴스를 생성하기 보다는 인스턴스를 생성해주는 메서드를 사용하여 인스턴스를 만드는 것이 유지보수할 때 편하다. => 즉 인스턴스를 생성해 주는 메서드를 통해 인스턴스를 생성하면 인스턴스를 사용하고픈 개발자는 코드가 간결해진다 이런 설계 방식이 "factory ..
캡슐화 '캡슐화' 문법은 개발자가 특정 멤버를 직접 접근하지 못하게 막는 문법이다 오직 메서드만을 통해 필드를 변경할 수 있도록 한다. 문법: 클래스 멤버나 인스턴스 멤버 선언할 때 접근 제한자(modifier)를 붙인다 접근 제한자 private : 클래스에 소속된 같은 멤버만 접근 가능 (default) : 같은 패키지에 소속된 멤버만 접근 가능 protected : 같은 패키지에 소속되거나 자손 클래스의 멤버만 접근 가능 public : 모두 접근 가능 게터 특정 필드를 변경하지 못하더라도 외부에서 이 값들을 조회할 수 있는 방법을 제공해야한다. 보통 이렇게 필드 값을 조회하는 용도로 사용하는 메서드의 경우 메서드의 용도를 이해하기 쉽도록 메서드를 만들 경우 getXxx() 형태로 이..
레퍼런스 형변환 레퍼런스를 형변환 하면 오버라이딩 하기 전, 해당 클래스의 인스턴스 변수를 만들 수 있다 A4 extends A3{String a = 40; boolean w = true;} A3 extends A{int a = 30; String t = "A3";} A {String n = "A"; String t = "A"; boolean w =true;} A4 obj1 = new A4(); System.out.println(((A3)obj1).a); System.out.println(((A3)obj1).w); 없으면 수퍼 클래스의 필드를 가리킨다. 만약 형변환 클래스에 존재하지 않는 필드를 가리키면 오류가 난다. ```java A4 obj1 = new A4(); System.out.println((..

접근 범위 private : 같은 클래스 (default) : 같은 클래스 + 같은 패키지 protected : 같은 클래스 + 같은 패키지 + 서브 클래스 public : 모두 접근 권한이 없는 메서드는 오버라이딩 할 수 없다. 오버라이딩 메서드의 접근 범위를 확대하는 것은 괜찮다. 접근 범위를 상위클래스의 접근 범위대로 지정하는 것 또한 가능하다. 하지만 상위클래스의 메서드의 접근 범위를 좁히는 오버라이딩은 불가능하다. => private 은 오버라이딩 자체가 불가능하기 때문에 접근범위를 확대할 수 없다. 오버라이딩과 super 키워드 A를 상속받은 A2의 클래스 안에서 A 클래스의 메서드를 오버라이딩 한 후 메서드를 호출할 때 this.m(); 을 호출하면 A2 클래스(해당 클래스)부터 해당 메서드..

다형성 (polymorphism) 클래스 계층 구조를 알아야한다. Vehicle Car Bike Sedan Truck 레퍼런스는 같은 타입의 객체를 가리킬 수 있을 뿐만 아니라 그 클래스의 서브클래스 객체까지 가리킬 수 있다. Vehicle vehicle = new Vehicle(); Bike bike = new Bike(); Car car = new Car(); Sedan sedan = new Sedan(); Truck truck = new Truck(); Vehicle vehicle2 = null; vehicle2 = bike; // OK vehicle2 = car; //OK vehicle2 = sedan; //OK vehicle2 = truck; //OK 이렇게 상위 클래스의 레퍼런스로 하위 클래스..

상속과 생성자 수퍼 클래스의 어떤 생성자를 호출할지 지정하지 않으면 컴파일러는 수퍼 클래스의 기본 생성자를 호출하라는 명령을 붙인다. super(); 이 경우 만일 수퍼클래스에 기본 생성자가 존재하지 않더라면 서브 클래스의 기본 생성자에 오류가 발생한다. 수퍼클래스의 어느 생성자를 호출해야하는지 명시해야한다. super(파라미터변수); 다중상속 자바는 다중 상속을 허용하지 않는다. 같은 변수에 다른 데이터 타입의 인스턴스 변수를 생성할 가능성이 있다. 이런 모호함으로 인해 자바는 다중 상속을 허용하지 않는다. Specialization / Generalization Specialization(전문화) = 수퍼 클래스를 상속받아 서브클래스를 만드는 것 Generalization (일반화) = 서브클래스들의..