Java 프로그래밍 06 : static
·
프로그래밍 언어/자바(Java)
static이라는 키워드는 유명하다. 나는 이 키워드를 주로 알고리즘을 풀 때 사용했는데, 해당 프로그램에서 전역 변수로 선언하여, 재귀 함수를 비롯한 main을 제외한 함수에서 사용하기 위해 static 변수를 썼었다. 사실 나에게 있어 static 변수는 '메모리에 적재되어 프로그램 종료까지 사라지지 않는 변수' 정도로만 인식되었다. 그런데, static 챕터 강의를 듣다보니 클래스 내에서 static으로 선언된 변수는 서로 다른 객체에서도 공유한다는 것을 알게 되었다. 클래스로 만들어진 인스턴스, 그러니까 객체라는 건 메모리 상에 다른 주소에 저장이 될 텐데 어떻게 static 변수가 공유가 된다는 걸까? 이번 포스트에서는 그걸 알아보려고 한다. 그 전에, 우선 static 키워드에 대해 다시 한 ..
Spring 01 : Spring의 객체 관리
·
백엔드(BE)/스프링 부트(Spring Boot)
저번에 자바의 Garbage Collection(GC)을 정리했었다. (아래 포스트 참고)  Java 프로그래밍 05 : Garbage Collection(GC)나는 C++을 사용할 때는 소멸자(Destructor)를 정의하거나 상속 받은 것을 재정의(override)해서 쓴 적이 있다. 그러나 Java로 개발하면서 생성자는 잘 써도 소멸자는 사용해 본 기억이 없었다.  처음buen-camino-developer.tistory.com   자바는 GC가 사용이 끝난 객체를 알아서 회수한다. 그런데 스프링은 Bean이라는 이름으로 프레임워크에서 사용되는 Java 객체의 생성 및 소멸을 직접 관리한다. 그러다보니 한 가지 궁금증이 생겼다. 스프링은 객체를 어떻게 관리하는 걸까? 분명 스프링을 배울 때 무언가를..
Java 프로그래밍 05 : Garbage Collection(GC)
·
프로그래밍 언어/자바(Java)
나는 C++을 사용할 때는 소멸자(Destructor)를 정의하거나 상속 받은 것을 재정의(override)해서 쓴 적이 있다. 그러나 Java로 개발하면서 생성자는 잘 써도 소멸자는 사용해 본 기억이 없었다.  처음 자바를 배웠을 때는 별 생각이 없었지만, 후에 알고 보니 자바는 가비지 컬렉션(Garbage Collectotion, GC)가 자동으로 쓰지 않는 객체를 회수하기 때문이었다. 문득, 한 가지 궁금한 점이 생겼다. C++의 경우 객체가 delete되거나, 스코프를 벗어나면 소멸자가 호출되고, 그 다음에 객체가 소멸된다. 그러나 자바는 소멸자가 존재하지 않는다. 그렇다면 Garbage Collection은 객체의 사용 종료 시점을 어떻게 판별하는 걸까?  이를 알기 위해서는 Garbage Co..
Java 프로그래밍 04 : 생성자와 소멸자 그리고 this 키워드
·
프로그래밍 언어/자바(Java)
저번 포스트에서는 자바의 특성인 객체 지향 프로그래밍에 대해서 다뤘다. 이번 포스트에서는 객체가 생성될 때 실행되는 생성자, 객체가 삭제될 때 실행되는 소멸자, 객체 자신을 가리키는 키워드인 this를 알아보자.  디폴트 생성자객체가 생성될 때 가장 먼저 호출되는 생성자. 개발자가 명시하지 않아도 컴파일 시점에 자동 생성된다.    사용자 정의 생성자디폴트 생성자 외에 특정 목적에 의해서 개발자가 만든 생성자로, 매개변수에 차이가 있다.    1. 객체 선언 : 객체를 만들 준비만 한 상태 (메모리에 공간 할당 X). 아직 obj는 null이다.2. 생성 : new 키워드로 메모리에 ObjClass 객체를 생성. 이제 obj가 실제 객체를 가리킨다.3. 초기화 : 객체가 생성될 때, 객체 속성(num, ..
Java 프로그래밍 03 : 객체 지향 프로그래밍이란?
·
프로그래밍 언어/자바(Java)
이번 포스트에서는 자바의 특성 중 하나인 객체 지향 프로그래밍에 대해서 다뤄보려고 한다. 나는 자바라는 언어를 18년도에 대학교 수업에서 처음 접했는데, 당시에는 객체와 클래스를 막연하게만 이해했던 것 같다. 그래서 이것이 프로그래밍을 할 때 왜 중요한지, 실제로 어떤 의미를 갖는지를 알지 못해 그해 기말 프로젝트에서 엄청 고생을 했던 기억이 있다. * 2:2 체스 게임을 구현해야 했는데, 폰, 비숍, 룩, 퀸, 킹 등의 객체 클래스를 생성해서 사용했어야 했다. 그러나 어떻게 클래스를 나누어야 하는지, 클래스에 어떤 속성이 들어가야 하는지 등을 전혀 이해하지 못했다. 머리로 외운 것과 실제 써보는 건 천지 차이더라. (사실 내 머리로는 1:1 체스 게임도 헷갈렸는데 2:2 체스 게임 룰도 조금 헷갈리긴 ..
Java 프로그래밍 02 : 프로그램의 실행 구조
·
프로그래밍 언어/자바(Java)
이번 포스트에서는 Java 프로그램의 실행 구조에 대해 다뤄볼 예정이다. Java는 C와 C++과 마찬가지로 컴파일러를 사용하여 소스 코드(고급 언어)를 저급 언어(기계어)로 바꿔주는 과정을 거친다. (참고로 Python, JavaScript는 컴파일러가 아닌 인터프리터를 사용한다.) 컴파일러 vs 인터프리터 컴파일러인터프리터번역 방식한 번에 전체 번역한 줄씩 번역실행 속도빠름 (기계어로 변환된 상태)느림 (실행할 때마다 번역)오류 발견컴파일 시 오류 발견실행 중 오류 발견코드 변경 시다시 컴파일해야 실행 가능즉시 실행 가능언어C, C++, Java(바이트코드)Python, JavaScript   그런데, 자바에서 사용하는 컴파일러는 JVM이 있어 C 계열과는 동작 과정이 조금 다르다.    Java 컴..
Java 프로그래밍 01 : Java란?
·
프로그래밍 언어/자바(Java)
프로그래밍이란?컴퓨터에게 명령을 내려 작업을 수행하게 하는 일.  소스개발자가 작성한 코드. 이 외의 것(컴파일러, 기계어 등)은 SW 개발자가 신경쓸 것이 아니다. 컴파일러개발자가 작성한 소스는 컴퓨터라는 기계가 이해할 수 없다. (컴퓨터는 0과 1로된 입출력을 처리하는 기계이기 때문!)따라서 소스를 기계가 인식할 수 있는 기계어로 변환해주는 인터프리터가 필요한데, 이것이 컴파일러.   Java 언어의 탄생1995년 제임스 고슬링에 의해서 탄생썬 마이크로 시스템즈에서 발표Oak 언어에서 시작해 Java 언어로 발전가전제품에 탑재할 수 있는 프로그램을 개발하기 위한 목적으로 탄생 (사실 크게 성공은 못 했다. 이후에 JSP, 서블릿이 유행하며 본격적으로 이름을 알리게 됨.)   Java 언어의 특징C, ..
Java 프로그래밍 00
·
프로그래밍 언어/자바(Java)
취준을 하면서 느꼈던 점 중 하나는 내가 사용하는 언어에 대해서 생각보다 잘 모르는 점이 많다는 것이다.작년에 면접을 갔을 때 받았던 질문 중 몇 개는 '왜 이 프로젝트에서 이 언어를 사용했는가?' 였는데, 이에 대한 대답을 제대로 하지 못했던 아쉬움이 있다. 상반기 공채가 한창 진행 중이긴 하지만... 4월에는 공고가 별로 없어서(T^T) 이 참에 기존에 배웠던 것을 다시 한 번 되짚어보면 좋을 것 같다. 오랜만에 인프런에 들어갔더니 내가 구매했던 것인지는 잘 기억은 안 나지만... 아래 강의가 있더라. 1강을 들어봤는데, 설명이 좋아서 이 강의와 함께 정리를 하려고 한다. https://inf.run/GQ11z 자바 프로그래밍 입문 강좌 (renew ver.) - 초보부터 개발자 취업까지!! 강의 |..