Final 제어자

final 제어자는 필드, 지역 변수, 메서드, 클래스 앞에 위치할 수 있으며, 어디에 위치하느냐에 따라 의미가 다르다.

 

final 제어자를 사용한 필드나 지역 변수에 값이 대입되면 절대 변경할 수 없다.

 

Final 변수

*final 변수는 언제 많이 사용할까?

스택 메모리의 변숫값은 자신이 만들어진 메서드가 종료되면 메모리에서 사라지는데,

이벤트를 처리할 때 메모리에서 살진 그 변수를 나중에 사용해야 할 때가 있다.

그러한 변수를 사라지지 않는 영역인 상수 영역에 복사해두고 사용한다.

 

어떤 필요에 따라 복사본을 하나 만들어 놓음으로써 원본이 삭제된 이후에도 그 값을 활용할 수 있도록 하는 것이 final변수 (필드, 지역변수)의 기능이다.

 

Final 메서드와 Final 클래스

final 메서드는 메서드의 기능을 변경할 수 없다. => 오버라이딩 할 수 없다.

final 클래스 역시, 최종 클래스의 의미로 더 이상의 자식 클래스가 없다는 의미이기 때문에 상속이 불가능하다.

 

abstract 제어자

abstract가 붙은 메서드를 추상 메서드, 클래스를 추상 클래스라고 한다.

*추상 메서드를 1개 이상 포함하고 있는 클래스는 반드시 추상 클래스로 정의해야 한다.

 

abstract 제어자의 장점

문법 오류를 사전에 출력해주어 실수를 사전에 방지할 수 있다.

'Web BackEnd > TIL Memo' 카테고리의 다른 글

이너 클래스와 이너 인터페이스  (0) 2022.01.05
인터페이스  (0) 2022.01.03
자바 제어자  (0) 2022.01.01
가변 길이 배열 입력매개변수 매서드  (0) 2021.12.31
클래스와 객체의 개념  (0) 2021.12.29

접근 지정자

맴버 및 생성자의 접근 지정자

public, protected ,default(package), private

사용범위) public > protected > default > private

 

private

자신의 클래스 내부에서만 사용할 수 있는 접근 지정자

 

default

같은 패키지 안의 모든 클래스에서 사용할 수 있음

 

protected

같은 패키지의 모든 클래스에서 사용할 수 있고, 다른 패키지의 자식 클래스 안에서 사용할 수 있다.

 

public 

동일 패키지의 모든 클래스와 다른 패키지의 모든 클래스에도 접근할 수 있다.

 

static 제어자

static이 붙어 있는 멤버를 정적 멤버라 한다.

 

정적 멤버의 가장 큰 특닝은 객체의 생성 없이 "클래스명.멤버명"만으로 바로 사용할 수 있다는 것.

 

특징: 정적 필드는 객체 간 공유 변수의 성질이 있다.

 

static이 붙어 있는 메서드도 동일하다.

static이 붙으면 해당 메서드를 객체 생성 없이 사용 가능하다.

package study;
class A3{
    void abc(){
        System.out.println("instance 메서드");
    }
    static void bcd(){
        System.out.println("static 메서드");
    }
}
public class StaticMethod {
    public static void main(String[] args) {

        //None static
        A3 a1 = new A3();
        a1.abc();

        //static
        A3.bcd();

    }
}

 

정적 메서드 내부에는 정적 멤버만 올 수 있으며,

정적 메서드 내부에서는 this 키워드를 사용할 수 없다.

'Web BackEnd > TIL Memo' 카테고리의 다른 글

이너 클래스와 이너 인터페이스  (0) 2022.01.05
인터페이스  (0) 2022.01.03
자바 제어자2  (0) 2022.01.02
가변 길이 배열 입력매개변수 매서드  (0) 2021.12.31
클래스와 객체의 개념  (0) 2021.12.29

2월

회고를 2월부터 하는 까닭은, 2월에 전역을 했으며 이 이전은 기억이 잘 안난다.

시간이 가길 바라면서 그냥 멍하니 시간을 보냈던 이유가 아닐까.

 

5월

바로 5월로 가는 이유는, 공부를 시작했던 시기가 5월 2일이기 때문이다.

공부를 처음 시작한 날, 이 날을 아직까지 기억하고 있는 까닭은

공부를 시작하기도 전에 깃허브라는 존재를 인식하고 있었고, 시작과 동시에 git에 push를 하며 공부의 시작을 알렸기 때문이다.

실제로 처음 push는 아마 백준 문제의 Hello World를 출력하는 문제였을 것이다.

그리고 이 처음 push가 내가 꾸준히 공부할 수 있게 했던 시작점이 아닌가 생각이 든다.

실제로 헬로우 월드를 찍으면서 시작하고 한 한달동안 solved에서 제공하는 브론즈 문제들을 풀며 진짜 수도 없이 많은 시간을 쓰고, 한문제에 3,4시간씩 고민하면서 문제를 바라봤던 시기는 아직도 기억에 남는다.

이때는 골드문제는 커녕 실버 3,4 문제만 보아도 어떻게 이걸 풀지 하는 생각이 들었던 때라 더 이 분야의 꿈을 꾸지 않았던 것 같다.

 

5월은 정말 알고리즘만 공부했다. 사실 이 때까지는 내가 프로그래밍으로 나아갈 것이라는 생각도 없었고, 그냥 학교 수업 듣는겸, 그리고 퀴즈를 푸는 것을 좋아하는 내 성격상 알고리즘 문제들이 예전에 어릴 때 닌텐도로 재밌게 했던 레이튼 교수의 이상한 마을의 문제를 푸는 것 같은 느낌이 들어서 꾸준하게 했던 것 같다.

또한 배운 내용이 적용되는 것을 보며 즐기는 타입인데, 학교의 자료구조와 알고리즘 1 수업에서 배웠던 내용들이 적용되는 것을 보며 재밌게 풀었다.

 

특히 이 당시에는 스택과 큐 문제를 정말 많이 풀었는데, 아무래도 학교에서 배우고 쉽게 적용됐던 것이 이 부분이라서 그렇게 열심히 풀었나 싶다.

그렇게 공부해가면서 티어를 올리는 것이 정말 재밌었다.

공부한 것이 즉각적으로 반영돼서 내가 어느 수준인지 보이는 느낌이 재밌었다.

 

6월

이 시기부터 조금은 뚜렷한 목표가 생긴 것 같다.

solved.ac에 열중해 있으면서 자연스럽게 랭킹에 눈이갔고, 처음 목표는 우리학교 100등안에 들기였다.

그 때 기억으로 100등의 커트라인이 골드4였나 그런 기억이 난다.

 

사실 공부를 늦게 시작했다는 자격지심으로 단기간에 공부한 내가 100등안에 들어가면 굉장히 뿌듯할거라는 생각과 성취감을 위해 했었다.

그러면서 백준의 단계별로 풀어보기를 시작했었다.

 

그리고 이 시기에 함께 시작한 것이 코드잇에서 진행하는 대학생 코딩캠프였다.

이때는 알고리즘에 정신팔려 있던 때라, "알고리즘은 자바가 안좋고 파이썬이 유리하더라" 이런 말을 들으면서

파이썬 강의를 수강해서 들었다. 이때 실제로 파이썬으로 문제도 많이 풀었고,

문자열 문제를 풀 때, 파이썬 풀이가 정말 간편하다는 것을 깨달으면서 크게 감동받았던 기억이 난다.

 

여기에 더해 알고리즘은 개발이 아니라는 것을 깨닫고 시작한 것이 Web개발, 그 중에서도 프론트엔드 분야의 공부를 시작했다.

사실 백엔드와 프론트엔드 사이에서 엄청나게 고민을 많이했는데, 프론트엔드를 선택했던 이유는

내가 치는 코드가 바로바로 눈 앞에 보이고, 만들어지는 과정이 보였기 때문이다.

그러면서 html과 css 공부를 시작했다.

 

7월

종강을 하고 달라진 점은 공부할 시간이 늘었다는 점이다.

그리고 이시기에 학교에서 진행하는 알고리즘 특강을 들었다.

헬로알고와 제휴해서 진행했던 알고리즘 특강인데, 이 시기에 정말 많은 것을 배웠다고 생각한다.

이때는 파이썬으로 문제를 풀며 흔히들 말하는 파이썬 뽕에 차있던 시긴데 자바로 진행한다고 해서 조금 속상해했던 기억이 난다.

하지만 들으면서 정말 많이 배웠던 것은 자료구조 뿐만이 아닌 알고리즘에 대해서도 배울 수 있었고, 그 알고리즘이 재밌어서 책을 사서 보면서 공부할 정도로 프로그래밍 공부의 큰 트리거가 되지 않았나 싶다.

 

이 때 파이썬 알고리즘 인터뷰라는 책을 구매해서 열심히 봤는데,

이 책과 알고리즘 특강으로 백준 solved 골드의 문을 두들기게 되었다.

 

8월

그냥 공부했다.

html css 공부를 마치고 자바스크립트를 공부하고 jquery를 공부했다.

또한 알고리즘 공부에 더욱 정진하여 

마침내 8월 30일

골드를 달성하고, 이제 100등안에 들겠다는 목표를 세우면서 공부했다.

 

이렇게 나의 상반기가 끝났고, 하반기에는 조금 더 알고리즘 보다는 웹 개발에 치중하면서

공부했는데, 이는 추후에 다루도록 하겠다.

자료형의 말줄임표를 이용해 가변적인 길이의 값을 받을 수 있다.

 

리턴 타입 메서드명 (자료형 ... 참조 변수명){

 

}

 


public class FlexibleSizeArrayArgument {
    public static void main(String[] args) {
        method1(1, 2);
        method1(1, 2, 3);
        method1();

        method2("안녕", "자바");
        method2("파이썬", "C++", "루비");
        method2();
    }

    public static void method1(int... values) {
        System.out.println(values.length);

        for(int k: values){
            System.out.println(k+" ");
        }
    }

    public static void method2(String ...values){
        System.out.println(values.length);

        for(String k: values){
            System.out.println(k+" ");
        }
    }
}

'Web BackEnd > TIL Memo' 카테고리의 다른 글

이너 클래스와 이너 인터페이스  (0) 2022.01.05
인터페이스  (0) 2022.01.03
자바 제어자2  (0) 2022.01.02
자바 제어자  (0) 2022.01.01
클래스와 객체의 개념  (0) 2021.12.29

객체와 클래스

객체

사용할 수 있는 실체

 

클래스

객체를 만들기 위한 설계도

다양한 자료형의 데이터를 하나로 묶어 관리할 수 있고, 데이터를 처리하는 다양한 기능까지 함께 관리하는 문법 요소

 


절차지향과 객체지향

절차지향형 프로그래밍 (PP: Procedural Programming)

순서에 맞춰 단계적으로 실행하도록 명령어를 나열하는 방식

 

객체지향형 프로그래밍 (OOP: Object-Oriented Programming)

프로그램을 객체 단위로 수행한다.

프로그램에서 사용되는 객체를 생성하고, 각 객체에 포함된 데이터와 기능을 상호 호출함으로써 프로그램을 구성하는 방식

자바에서 제공하는 객체지향 문법 요소

클래스 (일반 클래스, 추상클래스)

인터페이스

객체 생성에 따른 메모리 구조

객체 생성 코드

Student siun = new Student();

 

* new는 생성자로 만든 객체를 힙 메모리에 저장.

 

메모리

 

인스턴스 메서드 영역

------------------------         ----------------------------            -----(100)-----------------------

  메서드    Student    l        siun(100)                 l         (필드,메서드,이너클래스)

'Web BackEnd > TIL Memo' 카테고리의 다른 글

이너 클래스와 이너 인터페이스  (0) 2022.01.05
인터페이스  (0) 2022.01.03
자바 제어자2  (0) 2022.01.02
자바 제어자  (0) 2022.01.01
가변 길이 배열 입력매개변수 매서드  (0) 2021.12.31

+ Recent posts