본문 바로가기

CS(Computer Science)/객체지향 프로그래밍

객체지향 프로그래밍(JAVA)

객체지향 프로그래밍 : 로직을 상태와 행위로 이루어진 객체로 만드는 것이다.

 

추상화 : 복잡함 속에서 필요한 관점만을 추출하는 행위

 

refactoring : 코드를 개선해서 더 효율적으로 만드는 행위

 

<class vs instance>

class  -> 설계도 , 데이터 타입 정의

instance -> 제품 , 구현체

class member(static) : - class에 의해 만들어진 모든 instance가 class 변수를 공유함.(값의 변경도 모두 공유)

                             - class member는 인스턴스화 하지 않고도 class로 직접 접근 가능 함.

                             - instance 가 계속 새로 생성되어도 메모리 하나로 공유 

instance member :  인스턴스 끼리 개별적으로 소유 함.

                           instance 가 생성될 때 마다 메모리 새로 할당

 


<상속> 

-변수와 메소드를 상속 , abstract 나 interface가 없는 일반 클래스도 상속 가능

- subclass 생성자를 호출할 경우 super class 생성자 생성된 후 subclass생성

final  ->   변수, 메소드 ,클래스 앞에 붙을 수 있으며 ,변경/상속을 금지시킴.(abstract ,interface와 반대 개념)

- java에서는 다중 상속 안됨 . 

 

 

 

<abstract vs interface>

 

abstract는 상속을 강제, interface도 함수는 구현을 해야 사용 가능.

abstract : - abstract class를 상속할 때 abstract 함수들은 반드시 overriding 해줘야함.

             - abstract class는 이미 구현된 함수도 가질 수 있음.

             -> 장점 ex) 중요한 기능은 abstract class에 구현해놓고 사용자들이 상속을 받아 부가적인 기능을 구하면 보안

                            적으로 좋고 구조적인 형태가 변하지 않음.

interface :  - 구현되어있는 함수가 없이 모두 틀만 존재.

               - 복수개의 interface를 동시에 구현 가능

               - interface끼리 상속 가능

               - interface에도 변수 선언 가능 public final static로 지정해준거랑 같음

              -> 장점  ex) 해당 interface class의 기능들을 구현하는 개발자가 interface를 implements 하여 기능을 구현하

                               고 그 기능을 사용해서 개발하는 개발자가 dummy class에 interface를 implements하여 구현하

                               면 서로 동시에 개발할 수 있음. 틀이 둘다 같으므로, 나중에 합쳐도 문제 없음.


<overriding vs overloading>

overriding 재정의     -> 같은이름 ,같은 매개변수, 

overloading 다중 정의   -> 같은 이름 , 다른 매개변수 는 다른 함수로 인식

 

 

 

<classpath>

 main class 실행할 때 필요한 class들을 찾아볼 수 있는 경로들을 지정해줌(main class경로도 포함시켜야함)

 

              

 

<UI vs API>

User Interface : 개발자가 아닌사람들이 시스템을 제어하기 위한 접점. 시스템과 사용자의 접점.

Application Programming Interface : 개발자가 프로그램을 개발할 때 보다 쉽게 개발하기 위한 도구, 시스템의 접점.

                                                 

               

 

 

<접근제어자>

1. public : 다른 패키지에서도 자유롭게 접근 가능함.

2. protected : 다른 패키지라도 상속이라면(subclass에서는) 접근 가능.

3. default : 같은 패키지에서만 접근 가능

4. private :  깉은 클래스 안에서만 접근 가능.

 

- class앞에는 접근제어자 public , default 만 가능

- class앞에 public이 붙으면 소스코드 파일 이름이 반드시 public 클래스 이름이어야 함

 

 

 

 

<다형성>

하나의 메소드나 클래스가 있을 때 다양한 방법으로 동작하는 것.

 class 다형성 -> ex) super class를 상속받은 여러 subclass들의 함수는 이름이 같지만 서로 다르게 동작.

 method 다형성   -> ex) overloading 도 다형성임.

 

 

 

 

<예외 처리>

try-catch : 예외를 잡아서 처리를 해줌(예외 처리)

               - try 안에서 실행되다가 예외를 만나면 catch문으로 넘어감.

               - 전체 코드를 중지시키지 않음.

               - else if 문처럼 catch 도 분기 가능

               - e.getMessage ⊂ e.toString()  e.printStackTrace() (제일 자세함)

 

throws :  예외처리에 대한 책임을 다음 사용자에게 넘길 수 있음. 

             (자신이 예외객체를 생성해 발생시킬 수도 있음)

             - RuntimeException -> unchecked exception    ,,     나머지 -> check exception

              

 

 

 

 

<Object>

Object  : 모든 클래스들의 공통 조상. 

             - 상속받지않는 그냥 class는 자동적으로 Object를 상속받음

   

toString() : 객체정보를 알려주는 Object 클래스의 함수

 

 

finalize : 생성자와 반대로 객체가 소멸할 때 호출되는 함수 

 

finalize 잘안씀 대신 -> garbage collection : 메모리 해제를 자동을 해주는 것

                               ex) 변수를 사용하는 곳이 더 이상 없으면 변수에 대한 메모리를 해제시켜줌

 

clone() : 객체를 복제해주는 함수 

          ( Clonable interface를 implements한 후 clone 함수를 overriding 하면 사용가능함)

          (overriding 이유-> object 에서 clone 접근제어자가 protected이기 때문)


 

 

<enum>

 - 문자열도 상수처럼 사용하게 해줌 (독립적인 개체 상수)

 - enum 도 클래스

두 객체가 같은 의미

 

 

기본데이터형 -> 값을 복사

그 이외 참조데이터형(new) -> 참조로 데이터 전달(주소를 복사)

 

 

 

 

<제네릭>

 제네릭 : 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법(메소드 단위도 가능)

- 제네릭은 기본데이터형이 아닌 참조데이터 타입만 가능 (기본데이터 타입은 참조 데이터 타입으로 변환)

  (wrapper class로 감싸서 사용)

 

 

 

 

<컬렉션즈 프레임워크>

- 사용하기 쉽게 만들어 놓은 컨테이너

- set ( HashSet, LinkedHashSet, TreeSet)

- List ( ArrayList, Vector, LinkedList)

- Queue ( PriorityQueue)

- Map( sortedmap, hashtable, linkedhashmap, hashmap)

반응형