728x90
반응형
728x90
반응형
객체지향 정의: 객체지향이란 각각의 기능에 맞게 클래스들을 생성하여 프로그램의 기능을 구현하기 쉽게 만들고 나중에 유지보수나 재사용을 쉽게 가능하게 만들어주는 것. 각각의 클래스들을 만들때 필드(멤버변수 IV), 생성자, 메서드(행동, 기능)들을 만들어준다. 사과 판매를 예시로 하여 설명하였는데 필드, 생성자, 메서드를 아래와 같이 선언해준다. 판매자의 입장에서 필요한 멤버변수는 (1)개당 이윤과 (2)현재 사과의 잔고 (3) 사과 단가이기 때문에 필드에 3개의 변수를 선언했다. 필드는 그 클래스의 기능에 필요한 멤버변수를 선언한다 public class Mart { //field int benefit; // 이윤 int applenumber; //사과 잔고 int appleprice; //사과 단가 생..
섯다 카드 한벌 생성 섯다카드 클래스 자체를 array로 지정하여 선언 지정한 후 if로 조건문을 선언하여 숫자 조건 추가 숫자를 배정할 때 객체를 선언하여 그 멤버변수에 숫자를 배정 위의 메인클래스에서 for문으로 출력 // 섯다카드 20장을 포함하는 섯다카드 한벌(sutdadeck클래스)를 정의한 것. // 섯다카드 20장ㅇ을 담는 sutdacard배열을 초기화하시오. // 섯다카드는 1-10까지 숫자가 적힌 카드가 한장씩 있고 1,3,8일 경우 둘증의 한장은 Kwang이어야 함 // public class Chap7 { public static void main(String[] args) { SutdaDeck deck = new SutdaDeck(); for(int i = 0; i
인터페이스 default & static 만약 interface에 추상메서드를 추가하면 다른 interface의 메서드를 쓰는 클래스에 추가된 추상메서드를 전부 선언해야하는 불편함이 있다. 따라서 default값을 넣고 {} 중괄호를 붙여 선언하면 원하는 클래스에만 그 추상메서드를 선언할 수 있다 중괄호를 선언해서 몸통을 만들었기 때문에 생기는 문제점 2가지 여러 인터페이스 디폴트 메서드간의 충돌 이 경우 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩 해야한다. 디폴트 메서드와 조상 클래스 메서드간의 충돌 이 경우 조상 클래스의 메서드가 상속되고 디폴트 메서드는 무시된다. class methodtest implements iftest{ public void method() { } } class..
인터페이스를 자손 클래스로 만들기 아래와 같이 abstract 클래스는 extends로 연결하고 implements로 인터페이스 자손으로 연결 class Fight extends Unit implements marine{ //인터페이스를 implements로 묶어 손자 클래스로 변환 int x; int y; } abstract class Unit{ } interface marine{ void move(int x, int y); void attact(); 인터페이스 장점 두 대상(객체)간의 연결, 대화, 소통을 돕는 중간역활 아래와 같이 선언(설계 - 껍데기)와 구현(실행 - 알맹이)을 분리시킬 수 있게 도와줌 즉 붙어있는 경우 변경이 불리하지만, 아래처럼 따로 분리되있는 경우 알맹이만 바꿀 수 있으므로 ..
인터페이스 정의: 추상메서드의 집합 구현된 것이 전혀 없는 설계도 껍데기 모든 멤버가 public static final & public abstract이여야 함 따라서 public static final과 public abstract는 인터페이스 내에서 생략이 가능하다 추상메서드와 인터페이스의 차이점 추상메서드는 생성자, IV, 추상메서드를 가지고 있지만 인터페이스는 찐으로 아무것도 없는 빈 깡통 IV의 보유 여부로 판별 가능 = 인터페이스 IV 없음, 추상 메서드 IV 존재 다만 상수는 가질 수 있음 = final 인터페이스 선언하는 법 클래스와 동일하게 생성 위의 설명과 같이 앞의 public static final 은 interface에서 필수로 적용되야하기 때문에 생략이 가능하다 interfac..
추상클래스 미완성 메서드: 몸통 { } 이 없는 미완성 메서드 = 추상클래스; 미완성 설계도 목적: 다른 클래스 작성에 도움을 주기 위함 각각의 자손 클래스마다 조건이 다르므로 꼭 필요한 메서드지만 기능을 달리할 필요가 있는 메서드들은 조상에게 상속을 받아오고 자손의 클래스로 넘어올 때 기능을 각기 구현해준다 각기 구현해줌으로써 코드도 간결화되고 유지보수가 쉬워지는 장점 도움이 되는 과정 미완성 설계도가 1개 있다고 치면 추상 클래스는 그 미완성 설계도의 작성을 도와주는 추가 설계도라고 볼 수 있다. 그 설계도만 고침으로써 코드의 중복을 막아주고 나머지 코드를 동일화시켜서 관리가 용이해진다. 또한 각각의 의미있는 단계를을 추상클래스로 정의해 놓으면 나중에 특정 부분을 수정할 때 일처리가 쉬워진다. 설명:..
instanceof 참조변수의 형변환을 하기 전에 instanceof 함수를 써서 형변환 가능여부 확인 > 가능하면 true 반환 사용이유: 형변환하기전에 형변환 가능여부를 확인할 때 조상 멤버를 상속받을 때 어떤 인스턴스를 받을 지 알 수 없기 때문에 instanceof로 TV가 가르키는 smartTV 인스턴스로 형변환이 가능한지 확인해야 함 아래와 같이 형변환이 가능하면 true값을 반환하고 불가능하면 false값을 반환 SmartTV smarttv = new SmartTV(); TV tv = new TV(); System.out.println(smarttv instanceof TV); System.out.println(smarttv instanceof SmartTV); System.out.print..
다형성 - polymorphism 조상 타입 참조 변수로 자손 타입 객체를 다루는 것 다만 반대의 경우는 불가능 (자손타입이 조상타입 객체를 가리키는 것) 참조된 인스턴스 멤버의 개수(조상)가 실제 사용 가능한 개수(자손)보다 적기때문에 오류 발생 아래와 같이 객체와 인스턴스 타입이 불일치함을 다형성을 표현하였다고 함 TV t = new SmartTV(); // 객체와 인스턴스 타입이 불일치 SmartTV st = new SmartTV(); 객체와 인스턴스가 불일치함의 의미는 사용할 수 있는 인스턴스 멤버의 개수가 달라진다고 볼 수 있다. 만약 다형성이 아니라면 (객체와 인스턴스가 일치하면) 아래의 코드처럼 TV의 클래스에 들어있는 총 4개의 변수 + SmartTv 클래스의 2개의 변수 = 총 6개를 사..