[Java] 초간단 문법정리(1/2)

초보개발자
5 min readNov 10, 2020
  • 인프런의 ‘자바 프로그래밍 입문 강좌 (renew ver.) — 초보부터 개발자 취업까지!!’강의를 수강하며 정리한 내용입니다.
  • 정보 제공이 아닌 정리를 위한 글이라 불친절 할 수 있습니다.
  • 개인의 지식 Indexing 용도로 작성된 글입니다.

Java의 특징

java로 구현된 프로그램은 운영체제에 상관없이 실행가능(JVM에 의해)

(운영체제에 독립적)

입출력 문법

System.out.println();

-> 괄호 안쪽을 출력한 후 줄이 바뀐다.

System.out.print();

-> 괄호 안쪽을 출력한다.

System.out.printf();

-> 괄호 안쪽을 출력한다. 서식문자(ex: %d, %f etc)등을 활용해야한다.

import java.util.Scanner;

Scanner s = new Scanner(System.in);

s.nextInt();

-> import부터 s.nextInt()까지 세트이며 s에 int형 데이터를 입력받는다.

주석

// : 한 줄 주석

/**/ : 여러 줄 주석

형변환

byte b = 10;

int i = b;

->묵시적 형변환

.

int i = 1234

byte b = (byte)i

->명시적 형변환

배열의 선언

int[] Arr = new int[5];

int[][] DoubleArr = new int[5][5];

Arr, DoubleArr은 레퍼런스라고 한다(C++의 포인터 같은 존재)

(메모리에 데이터를 동적으로 할당한 후 레퍼런스가 참조하는 형식)

.

Arr = null;

레퍼런스에 저장된 주소값에 null값을 넣음으로써 동적할당을 해제한다.

C++과는 다르게 GC(Garbage Collector)가 존재하기 때문에 할당해제를 직접 안해도 된다. (ex delete)

메모리 누수는 걱정 안해도 되서 좋은거 같다.

이 경우 Arr에 대해 이 전에 참조하던 객체의 함수 사용을 하게되면

NullPointerException이 발생한다.

객체

1.static을 멤버변수 앞에 붙이면 같은 클래스형 객체간에 해당 변수에 대해 공유가능

2.private이 붙은 멤버변수의 경우 내부 멤버함수(메소드)를 통해서만 접근이 가능하다.

3.데이터 은닉을 위함이며 외부에서 함부로 접근, 변경을 막는다.

4.getter, setter를 만듦으로써 외부 접근, 변경이 가능하게 조치 취할 수 있음. 이 경우에 적절한 조건문을 적용하여 무조건적인 접근, 변경을 방지할 수 있다.

5. this

->객체 자신을 가리킨다.

메소드

접근자

public — 외부함수에서 접근이 가능

private — 내부 멤버함수를 통해서만 접근가능

protect — 같은 패키지나 상속 관계에 있을 때 접근가능

overloading

함수에 대해 매개변수(parameter) 갯수나 데이터 타입을 다르게 하여 같은 이름으로 여러 개의 다르게 동작하는 함수 정의방법

상속

생성자 호출순서: 부모 생성자 -> 자식 생성자

.

super

부모 객체를 가리킨다.

.

ChildClass 라는 클래스와 ParentClass라는 클래스가 존재할 때

public class ChildClass extends ParentClass {

//이런 식으로 선언한다.

}

‘extends’가 키워드.

.

Java에서는 단일 상속만 가능(다중 상속 불가능)

overriding

함수를 부모 클래스의 메서드와 동일한 이름으로 자식 클래스에서 재정의 할 경우 갱신됨

@Override

public void funcExample() {

//위의 ‘@Override’는 명시의 용도(명확성을 위해?)

}

형변환(부모 클래스형 레퍼런스에 자식 클래스를 동적할당)

ParentClass fch = new FirstChildClass();

1.묵시적 형변환

2.fch는 자식 클래스의 속성, 메소드 사용불가.

단, 자식에서 오버라이딩을 했을 경우 그 함수 호출 시 적용됨(자식에만 있는 함수의 경우 호출불가)

3.그릇(부모)에 담기는 물질(자식)이 더 크기 때문에 그릇에 담기에 부족함이 없기에 묵시적으로 형변환됨.

>>그래서 자식에 존재하는 메소드 사용이 불가능한 걸까?

익명 클래스(Anonymous Class)

AnonymousClass라는 클래스가 있고 거기에 method()함수가 있다고 가정하면, 아래와 같이 구현함.

new AnonymousClass {

@Override

public method() {

//

}

}.method()

레퍼런스 없이 동적 할당되어서 일회성으로 소모되는 클래스이며 주로 추상클래스, 인터페이스에 사용되는 프로그래밍 방식

패키지

다른 패키지에 존재하는 클래스를 import하기 위해서 import+‘패키지 이름’+‘.클래스명’을 코드 상단에 추가한다. 패키지에 여러 클래스가 존재하고 한 번에 처리하고 싶다면 import+‘패키지 이름’+‘.*’으로 대신한다.

참고 강의

--

--