Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

어? 이게 되네

2022.04.07. 목요일 이공계 전문기술 연수사업 9일차 본문

TIL

2022.04.07. 목요일 이공계 전문기술 연수사업 9일차

토끼귀에진주귀걸이 2022. 4. 7. 17:55

오늘 배운 것

추상클래스는 추상메소드만으로 구성되어야 한다
=>거짓. 추상클래스는 body를 구체화한 메소드를 포함할 수도 있음.

추상메소드는 미래의 후손클래스들이 반드시 가져야 할 메소드이지만
부모클래스를 만드는 시점에서 구체화할 수 없는 경우,
메소드 몸체를 정의하지 않고 메소드 선언문만 명시함.
이것을 추상메소드라 하고 메소드 이름 왼쪽에 abstract키워드를 써줌.

이와 같이 추상메소드를 하나라도 포함하고 있는 클래스를 추상클래스라하고 
클래스 이름 왼쪽에 abstract 키워드를 써줌.
추상클래스는 추상메소드 뿐만 아니라 바디가 구체화된 메소드를 포함할 수 있음.

또,추상클래스는 body를 구체화하지 않는 메소드를 포함하고 있기 때문에
추상클래스의 객체는 생성할 수 없음!!!!!!!!!!!!!!!!(어제 오류난 거)

반드시 그 추상클래스를 상속받아 추상메소드를 구현한(오버라이딩한) 클래스의 객체를 생성해야 함.

-------------------------------------------------------------------------
익명클래스
ㄴ이름없는 클래스. 추상클래스를 상속받은 클래스를 정의하는데 따로 이름을 정해주지 않고 바로 추상메소드를 오버라이딩한
클래스를 만들면서 객체를 생성할 때 사용함.

---------------------------------------------------------------------------
객체지향 언어 중 하나인 c++에서는 클래스의 다중상속이 가능함.
ex)
class A{
public void pro(){
}
}

class B{
public void pro(){
}
}

class C :A,B{
//아버지가 두명...?
}

C ob=new A();
ob.pro();
부모 A의 pro를 호출해야 할지, B의 pro를 호출해야할지 몰라서 오류가 발생함.

이러한 문제점때문에, 자바에서는 클래스의 다중상속을 금지함!

----------------------------------------------------------------------------------
인터페이스
ㄴ다중상속의 효과를 기대할 목적으로 "인터페이스"를 사용함!
(다중상속을 하려면 인터페이스를 쓴다는 뜻)

class 클래스이름{

}

interface 인터페이스이름{

}

-----------------------------------------------------------------------------
인터페이스는 완전 추상의 개념이며
인터페이스의 구성요소는 상수와 추상메소드만으로 구성됨.(변수가 올 수는 없음!!)
인터페이스 안에 변수이름 앞에 final을 붙이지 않아도 자동 final됨.
인터페이스 안에 메소드이름 앞에 abstract을 붙이지 않아도 자동 abstract됨.

-----------------------------------------------------------------------------
cui character user interface 문자로 사용자와 컴퓨터가 의사소통
gui graphic user interface 그림으로 사용자와 컴퓨터가 의사소통

-----------------------------------------------------------------------------
문자열 처리
ㄴ자바에서는 문자열 처리를 위하여 
String
StringBuffer
StringBuilder 라는 java.lang패키지의 클래스들을 제공함!

String 특) 변하지 않는 문자열임.
StringBuffer와 StringBuilder는 변하는 문자열임.

String에 연산을 하게 되면
새로운 객체가 생성되고 참조변수를 새로운 메모리에 참조하게 됨.
이전에 참조하던 메모리는 더 이상 참조되지 않는 garbage가 됨.

StringBuffer에 append를 통하여 문자열을 추가하면 새로운 객체가 만들어지는 것이 아니라
원래 객체에 문자열이 추가됨.

-------------------------------------------------------------------------------
java.lang
ㄴ자바가 제공하는 클래스를 사용하기 위해서는 import를 해야 함.
그러나 java.lang 패키지의 모든 클래스들은 자동으로 import되기 때문에
사용자가 따로 import를 하지 않아도 됨.

String이 가진 유용한 메소드
charAt();
equals(); //대소문자 구별함
endsWith();
startsWith();
equalsIgnoreCase(); //대소문자 구별없이 판별함
indexOf(); //어떤 글자 안에 그 글자가 최초에 몇 번 째자리에 오는지 출력해줌
lastIndexOf();
split();
substring();
toLowerCase();
toUpperCase();
trim();
valueOf();

자바 클래스의 제일 조상은 Object

-------------------------------------------------------------------------
기본 자료형을 String으로 변환하기 위해서는 String.valueOf() 또는 기본자료형+""
String을 기본 자료형으로 변환하기 위해서는 Wrapper 클래스들을 이용(각 기본자료형에 따른 클래스)

boolean Boolean
char Char
byte Byte
short Short
int Integer
long Long
float Float

parseInt();
parseDouble();
......

변하는 문자열 처리에는 StringBuffer로 처리하는 것이 좋다.
하지만 대부분 문자열처리메소드는 String으로 되어있기 때문에
toString()을 사용하여 StringBuffer를 String으로 변환하여 사용한다.

------------------------------------------------------------------------------
예외처리
ㄴ프로그램 실행 중에 사용자의 부주의 등으로 인하여 예기지 않는 상황이 발생하는 것을 예외라고 하며
이 것을 처리하는 것을 "예외처리"라고 함.

자바는 대부분의 발생할 수 있는 예외에 대해서 이미 클래스화되어 있음.
그 상황이 되면 자동으로 그 예외 객체가 생성됨.

ex) int []a={10,20,30};
a[4]=5;
이것은 new ArrayIndexOutOfBoundsException()라는 예외 객체를 자동으로 생성해준다는 말.

=>예외가 발생할 만한 코드를 그대로 두게 되면 사용자로부터 신뢰를 잃게 됨.
그래서 우리는 예외처리를 해줘야 함.

-----------------------------------------------------------------------------
예외처리하는 방법

try{
예외가 발생할 만한 문장(들)
}catch(예외자료형 변수명){
예외를 처리할 문장(들)
}

 

오늘 헷갈린 것

  • 부모 참조변수로 자식클래스 객체만들기
  • exam08 printSpeed() 0나오는 이유..
  • addMouseListener(this);
  • 인터페이스가 사용되는 사례-마우스이벤트!
  • data.trim().toLowerCase()랑 그냥 data.trim(); data.toLowerCase()의 차이
  • 그냥 오늘 후반부에 나간 String의 여러 메소드,.. 너무 빨리 나가서 어렵다ㅜㅠㅠㅠ 숙지 안된 상태임...

 

오늘 한 생각

자바는 정말 똑똑한 애다...

자바 만든 사람은 진짜 천재다..!!!!!!!!

문제 하나에 일희일비하지 말자.... ㅠㅠ