본문 바로가기
코딩/JAVA

겨울방학 JAVA 4일차

by sonysame 2017. 12. 29.

1. 구조적 프로그래밍 vs 객체지향 프로그래밍




구조적 프로그래밍: 기능으로 세분화 시켜 작성, 빠르고 쉽게 구현이 가능, 유지보수와 재사용이 힘들다.


객체지향 프로그래밍: 유지보수와 재활용성에 초점이 맞춰져 있다. 설계와 구현이 어렵다






2. 객체지향


-Abstraction(추상화)


복잡한 기능, 상태를 단순화시키고 공통적인 내용을 뽀아서 이름을 붙여 표현하는 기법


-Method Overloading


동일한 이름으로 여러개의 method를 class내부에서 선언할 수 있다.(단, method의 signature가 다름)


-Information Hiding(정보은닉)


객체가 가지고 있는 정보(field값)보호


-Inheritance(상속)


새로운 클래스를 기존 클래스를 확장해서 만드는 방법


class MyClass extends SuperClass{


}


superclass, 기반클래스, upper class, parent class, 상위 클래스


JAVA는 단일 상속만 지원-SRP


JAVA의 최상위 class는 java.lang.Object




-polymorphism: 하나의 instance를 여러가지 형태(type)으로 사용이 가능하다. 하나의 instance를 다른 형태로 이용이 가능




-동적바인딩(dynamic bindnig)


상속 관계에 있을 때 만약 overriding된 메소드가 하위클래스에 존재하면 사용하는 클래스 타입과 상관없이 무조건 overriding된 method호출 




-separate of concern(Soc)


관심사가 코드 여러군데에 중구난방으로 퍼져있으면 나중에 유지보수할 떄 문제가 발생






3. Java class




1) 객체 모델링의 수단


2) 새로운 데이터타입을 만드는 수단(ADT)


JAVA의 데이터 타입은 크게 2종류-Primitivity Data Type (8개), Reference Data Type(class)


3) instance를 만들어 내기 위한 수단


-instance를 생성하려면 어떻게 해야 하나요?


class안에 들어있는 constructor(생성자)를 호출해야지 heap에 instance가 생성돼요!




4. constructor


-이름이 class이름과 완전히 똑같아요


-마치 method처럼 생겼어요


-리턴타입이 존재하지 않아요


-모든 클래스는 적어도 1개 이상의 생성자가 존재


-생성자는 instance의 초기화를 담당






5. JVM, JRE, JDK


Java Source code=>Main.java


실행시키기 위해 compile=>javac Main,java


컴파일 결과로 bytecode 생성=>Main.class


JVM을 기동해서 우리가 생성한 bytecode를 읽어들여서 실행=>java Main


JVM은 우리 프로그램(class)를 실행시켜주는 주체


JVM만 존재하면 우리 프로그램이 실행이 된다. (Write Once Run Anywhere!)






6. JVM이 관리하는 Memory 구조




-Method Area


특정 클래스가 처음 사용될 때 클래스의 정보를 메모리에 올린다.


필드의 정보, 메소드의 실행코드, static 필드 공간




-Stack


메소드가 호출되면 stack에 method를 위한 일정공간이 할당.


이 안에서 해당 method가 사용하는 지역변수가 생성. 메소드가 종료되면 해당 영역은 날라간다.



-Heap


instance가 생성되는 공간




7. 


(클래스 or 인스턴스).(필드 or method)




8. Package & import


관련이 있는 클래스를 논리적으로 묶어주는 개념




9. Access Modifier(접근제어자)

-public


-protected


-default


-private=>information hiding을 구현=>getter&setter




class안의 field는 특별한 이유가 없는 이상 private으로 설정하는거고 당연히 getter와 setter가 나온다.


'코딩 > JAVA' 카테고리의 다른 글

JAVA 겨울방학 7일차  (0) 2018.01.04
JAVA 겨울방학 6일차  (0) 2018.01.03
겨울방학 JAVA 3일차  (0) 2017.12.28
겨울방학 JAVA 1일차  (0) 2017.12.27
겨울방학 JAVA 2일차  (0) 2017.12.27