[Java] 자바의 특징
- 객제 지향적 프로그래밍을 지향한다.
-
Write One Run Anywhere
- JRE(Java Runtime Environment) 를 이용해, 플랫폼(맥,윈도우,안드로이드,IOS)에 종속되지 않고 실행된다.
[Java] 변수
어떤 값을 할당하는 공간을 메모리라고 한다. 그 공간에 이름을 붙혀주는 것을 변수라고 한다.
[Java] 초기값
Java는 초기값을 할당해주지 않으면, 해당 자료형의 초기값을 기본값으로 자동할당하여 초기화한다.
import java.util.Map;
public class Test {
static byte byteT;
static short shortT;
static int intT;
static long longT;
static float floatT;
static double doubleT;
static char charT;
static boolean booleanT;
static String stringT;
static Map mapT;
public static void main(String[] args) {
System.out.println(byteT); //0
System.out.println(shortT); //0
System.out.println(intT); //0
System.out.println(longT); //0
System.out.println(floatT); //0.0
System.out.println(doubleT); //0.0
System.out.println(charT); //
System.out.println(booleanT); //false
System.out.println(stringT); //null
System.out.println(mapT); //null
}
}
[Java] 객체지향
객체지향기본 - 클래스
틀
객체지향기본 - 인스턴스
클래스 틀을 이용해 만들어진 실제 사용 객체.
객체지향기본 - 인스턴스의 특징
붕어빵이 구워진 뒤 먹은붕어빵, 식은붕어빵, 갓 구운 붕어빵 등등 각각의 상태가 달라지는 것 처럼. 인스턴스는 생성 된 뒤로 그 상태가 각각 다르게 변함.
객체지향기본 - 메소드
함수
객체지향기본 - 생성자
인스턴스 초기화 메소드. new 키워드를 이용해 사용하며, return 값이 없고 자신이 속해있는 class와 같은 값을 가진다.
객체지향기본 - 기본 생성자 초기화
생성자를 정의하지 않고, 인스턴스를 초기화해도 잘 동작이 된다. 그 이유는 자바컴파일러가 자동으로 매개변수가 없는 기본생성자를 만들어주기 때문이다.
상속 - 오버로딩(쌔삥)
부모에 있는 같은 이름의 메소드를 만들되, 매개변수의 갯수, 타입이 다른 메소드를 만드는 것.
상속 - 오버라이딩
부모에 있는 메소드 중 메소드이름, 매개변수의 갯수, 타입, return타입 모두 일치하지만 기능자체를 새로 정의한 함수를 만드는 것.
접근제어자
키워드별 권한 접근제한 정도
private > default > protected > public
- private : 같은 클래스 내 에서만 접근이 가능함.
- default : 같은 패키지 내 에서만 접근이 가능함.
- protected : 같은 패키지, 다른패키지의 자손클래스에서 접근이 가능함.
- public : 접근 제한 없음
접근제어자 - 캡슐화
객체지향이란 객체 간 상호작용을 표현 한 것이다. 상호작용을 할 때는 우리가 현실에서도 모든 정보를 남에게 공개하지 않는 것 처럼, 정보에 대한 제한을 두어야 한다. 이런 제한을 두어 정보를 숨기는 것을 캡슐화라고 하며, 접근제어자는 자바의 캡슐화 구현을 위해 가장 필요한 개념이다.
추상클래스
추상메소드를 선언 할 수 있는 클래스. 상속없이 그 자체로 생성자를 이용해 인스턴스를 생성하는 것이 불가하다.
extends
키워드를 사용하여 상속하며, 다중상속이 불가하다.
abstract class A{
....
}
추상메소드
설계도(매개변수 정의)만 있고, 구현체(몸통)은 없는 메소드. 구현은 자식클래스에서 구현해야한다.
미완성으로 남겨두는 이유는 상속받는 클래스 마다 반드시 동작이 달라지는 경우에 상속받는 클래스 작성자가 반드시 작성하도록하기 위함입니다.
abstract class A{
....
abstract 리턴타입 메소드이름(int C);
}
인터페이스
객체의 특정행동의 특징을 정의한다. 인터페이스를 실행하는 클래스는 반드시 인터페이스에 정의된 메소드를 구현해주어야한다.
implements
키워드를 이용해서 상속할 수 있으며, 다중상속이 가능하다.
인터페이스와 추상클래스의 차이 정리
인터페이스 | 추상클래스 |
---|---|
구현하려는 객체의 동작의 명세 | 클래스를 상속받아 이용 및 확장을 위함 |
다중 상속 가능 | 다중 상속 불가능 , 단일 상속 |
implements를 이용하여 구현 | extends를 이용하여 구현 |
메소드 시그니처(이름, 파라미터, 리턴 타입)에 대한 선언만 가능 | 추상메소드에 대한 구현 가능 |
[회고] 221107
처음 타입을 배울 땐 몰랐는데, 객체지향개념에 들어가니 내가 왜 옛날에 국비지원학원에서 자바수업에 그렇게 들어가기 싫어했는지 깨닫게 되었다.
하지만, 그 때보다는 다른 이론을 받아들이는데에 있어서 조금은 여유로워 진 것이 느껴졌다. 다른 언어를 프레임워크레벨까지 보고 와서 그런건가..? 웹플로우에 익숙해져서 인가.. 하지만 아직 자바의 객체지향을 잘 사용하기 위해 만들어진 인터페이스나 추상메서드의 개념은 언제 어디에 사용해야하는지 익숙하지 않다. 불편함을 익숙함으로 만드는 것에 익숙해져야 개발자다! 얼른 많이 시행착오 겪어서, 손에 익었으면 좋겠다.