YJ의 새벽
JAVA (CS) 본문
- 객체지향언어란?
객체를 만들고 객체를 사용하는 프로그래밍 방법.
즉, 프로그램을 단순히 데이터와 처리방법으로 나누는게 아니고 ,
다수의 객체를 만들어 객체간의 상호작용으로 로직을 구성
( 캡슐화 , 상속 , 다형성 , 추상화 )
- JAVA 접근제어자
외부 객체의 무분별한 접근으로부터 보호 (데이터 무결성) .
--public : 모든 패키지, 모든 클래스 접근 허용
--protected : 같은 패키지 , 모든 클래스 접근 허용
--default : 같은 패키지 내 클래스만 접근 허용 (기본으로 default가 깔려있음)
--private : 같은 클래스 내 접근 허용
- 인터페이스와 추상클래스(abstract)
인터페이스 : 추상적인 개념만 존재.
-- (추상메소드의 집합 ) (모든멤버가 public)
-- 인터페이스 내의 모든 메소드는 추상메소드 (public abstract) 이므로 생략가능하다.
-- 인터페이스 내의 모든 변수는 상수(static final) 이다
-- 다중 구현이 가능 , (implements A , B , C .. )
-- 상속받는 자식클래스에 모든 메소드에 대한 구현을 강제.
** 매개변수로 인터페이스 타입을 받으면 , 인터페이스를 구현한 클래스의 객체만 가능.
-- 인터페이스에 디폴드 메소드,static 메소드 추가 가능. (JDK1.8부터 , (인터페이스원칙 위반))
--
추상클래스 : 추상메소드를 하나 이상 포함한 클래스.
-- 선언부 ( ) 만 있고 구현부 { } 가 없는 메소드이며, 자식클래스에게 추상메소드 구현을 강제.
( 미완성 클래스 )
-- 다른클래스 작성에 도움을 주기위한것, 추상클래스는 인스턴스화 할 수 없다.
-- 다중상속이 불가하여 한개의 클래스만 상속가능하다 .
-- 꼭 필요하지만 자식클래스마다 다르게 구현될것으로 예상되는 경우.
인터페이스,추상클래스 공통점
--추상 메서드를 가질수 있다. (미완성설계)
인터페이스,추상클래스 차이점
--인터페이스는 IV ( 인스턴스 ) 를 가질 수 없다.
- static
-- 정적 멤버 ( 클래스 멤버 )
-- 객체가 아닌 클래스에 고정되어 있음을 나타내는 키워드
-- 클래스호출 , 객체 생성을 따로 하지않고 사용하기에 사용성이 좋음
-- 메모리 자원을 할당해놓고 사용하는것이라 너무 많이사용하면 메모리를 많이차지한다.
-- 클래스 메모리에 올라갈때 자동으로 생성.
- 오버로딩(Overloading) 과 오버라이딩(Overriding) =다형성
오버로딩
-- 같은 이름을 가지는 메소드를 여러개 가지는것.
-- 같은 이름이지만 매개변수와 타입을 다르게 함으로서
같은 메소드를 다릉 기능으로 재정의
-- 가독성이 좋아진다.
오버라이딩
-- 클래스 간의 메소드 재정의 (상속)
-- 부모 클래스에서 존재하는 메소드를 자식 클래스에서 같은이름으로 재정의.
- 내부클래스
-- 클래스 안의 클래스
-- 내부클래스는 객체생걱없이 외부클래스 멤버에 쉽게 접근할 수 있다.
-- 코드의 복잡성을 줄일수 있다. ( 캡슐화 )
-- static 멤버는 static 내부클래스만 정의할 수 있다. (객체를 생성없이 사용가능해야 하기때문)
- 익명클래스 (anonymous class)
-- 이름이 없는 일회용 클래스 , 정의와 생성을 동시에.
EX )) Object iv = new Object() { void method(){} };
- 에러 (Error) , 예외 (Exception)
-- 컴파일에러 (compile-time error) : 컴파일 할때 발생하는 에러
-- 런타임에러 (runtime error) : 실행 할때 발생하는 에러 (프로그램종료)
-- 논리적에러 (logical error) : 작성 의도와 다르게 동작 (프로그램종료x)
에러는 어쩔수없지만, 예외(Exception)는 처리하자.
- hashCode() (객체의 지문)
--객체의 해시코드를 반환하는 메서드
--Object 클래스의 hashCode()는 객체의 주소를 int로 변환해서 반환.
--equals()를 오버라이딩하면, hashCode()도 오버라이딩해야한다.
equlas() 결과가 true인 두 객체의 해시코그는 같아야하기 때문.
- toString() , toString() 오버라이딩
--객체를 문자열(String)으로 변환하기 위한 메서드
- StringBuffer 클래스
--String과 달리 내용을 변경할수있다.
--append() 로 문자열 추가.
--배열의 길이는 변경불가 하다. 공간이 부족하면
새로운 배열생성후 복사하고, 참조변경한다 .
--append() 추가 , delete() 삭제 ,insert() 삽입
--capacity() 길이확인.
- StringBuilder
--StringBuffer 와 동일.
--차이점은 StringBuilder 는 동기화가 안되어있다. (멀티쓰레드에 안전)
--멀티쓰레드 프로그램이 아닌경우 , 동기화는 불필요한 성능저하.
--싱글쓰레드 사용시 StringBuilder 사용하면 성능향상.
- Math 클래스
--수학관련 static 메소드의 집합.
--abs() 절대값, ceil() 올림, floor() 버림
--max(a,b) a,b중 큰값을 반환
--mix(a,b) a,b중 작은값을 반환
--random() 0.0~1.0 범위 임의double값.
--round() 반올림,
--rint() 홀수일때 올림,짝수일때 버림 ( 결과오차를 줄임)
- 래퍼(Wrapper) 클래스
--8개의 기본형을 객체로 다뤄야할때 사용하는 클래스
--기본형값을 감싸는 클래스
-- a.compareTo(b); : 같으면 0, 작으면 양수, 크면 음수 리턴.
- 문자열 숫자로 변환
-- int a = Integer.parseInt("100");
-- int a = Integer.valudeof("100");
- 오토박싱 / 언박싱
--int ---> Integer 오토박싱
Interger --> int 언박싱
--jdk1.5 이후 자동언박싱.
'SelfStudy > JAVA' 카테고리의 다른 글
JAVA (Comparable , Comparator) (0) | 2023.02.02 |
---|---|
JAVA (Iterator, Arrays) (0) | 2023.02.02 |
JAVA (Stack,Queue) (0) | 2023.02.02 |
JAVA (ArrayList,LinkedList) (0) | 2023.02.01 |
JAVA (Collections Framework) (0) | 2023.02.01 |