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 |