✏️ 2022-11-07 Today I Learn

@mitoconcrete · November 07, 2022 · 7 min read

[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

처음 타입을 배울 땐 몰랐는데, 객체지향개념에 들어가니 내가 왜 옛날에 국비지원학원에서 자바수업에 그렇게 들어가기 싫어했는지 깨닫게 되었다.

하지만, 그 때보다는 다른 이론을 받아들이는데에 있어서 조금은 여유로워 진 것이 느껴졌다. 다른 언어를 프레임워크레벨까지 보고 와서 그런건가..? 웹플로우에 익숙해져서 인가.. 하지만 아직 자바의 객체지향을 잘 사용하기 위해 만들어진 인터페이스나 추상메서드의 개념은 언제 어디에 사용해야하는지 익숙하지 않다. 불편함을 익숙함으로 만드는 것에 익숙해져야 개발자다! 얼른 많이 시행착오 겪어서, 손에 익었으면 좋겠다.

@mitoconcrete
어제보다 조금 더 성장하기 위해 기록합니다.