YJ의 새벽

JAVA (CS) 본문

SelfStudy/JAVA

JAVA (CS)

YJDawn 2023. 1. 30. 18:03
  • 객체지향언어란?

 

객체를 만들고 객체를 사용하는 프로그래밍 방법.

즉, 프로그램을 단순히 데이터와 처리방법으로 나누는게 아니고 ,

다수의 객체를 만들어 객체간의 상호작용으로 로직을 구성

( 캡슐화 , 상속 , 다형성 , 추상화 ) 

 

 

  • 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
Comments