자바

· JAVA
제네릭이란? generic : 일반적인 클래스에서 사용하는 변수의 자료형이 여러개 이며 메소드는 동일한 경우, 클래스의 자료형을 특정하지 않고 추후 해당 클래스를 사용할 때 지정 할 수 있도록 선언한다. 컬렉션 프레임워크에서 많이 사용되고 있다. 제네릭은 타입에러의 발생을 방지한다. 런타임에서 타입 에러가 발생하는 것보다 컴파일 시에 미리 타입을 체크하여 에러를 사전에 방지하는 것이 좋다. 그렇다면 왜 굳이 제네릭을 사용해야 할까? 클래스의 멤버를 Object로 선언하여 모든 타입을 담을 수 있게 만들면 되지 않는가? Object는 문제점이 하나 존재한다. 필요에 의해 타입을 변환해줘야 한다는 점이다. 제네릭은 타입 변환을 제거한다. 코드에서 불필요한 타입 변환을 제거하여 프로그램 성능을 향샹 시킨다. ..
결론 [JAVA] int num = 1; 그래서 num은 '값'을 가지는가? 이전의 포스팅은 접근 방식 자체가 잘못되었다는 것을 깨달았다. 나의 질문이 모호했기 때문에 사람마다 답변이 달랐다고 생각한다. int a = 1; 에서 변수 a는 값 그 자체를 가리킨다는 사람과 주 hyunsb.tistory.com 의문 primitve type은 Constant Pool에 있는 특정 상수를 참조하는 것이다. 그렇기에 int a = 1, int b = 1 인 경우 같은 주소를 참조하기 때문에 a==b 가 성립된다. 라는 정보를 보고 정말 그럴까? 값을 저장하는 것이 아닌가? 라는 의문이 생겨 해당 실험을 진행하게 되었습니다. int num = 1; 위의 코드는 정수형 변수 num에 1이라는 값을 저장하는 코드입니..
· JAVA
자바를 공부하다 보면 컴파일, 컴파일에러, 런타임 같은 단어를 많이 듣게 될 것입니다. 정적 바인딩과 동적 바인딩에 대해 공부하던 중 컴파일과 런타임을 알아야 이해가 되는 것들이 많아서 먼저 간단하게 이해하고 넘어가려 합니다. 이번 문서에서는 자바의 컴파일과 실행 과정을 알아보겠습니다. 우리가 열심히 java로 간단한 서비스 코드를 작성했습니다. 이후 이 소스코드를 실행시킨다고 생각해보죠, 우리의 코드는 어떤 과정에 의해 실행되는 걸까요? 우리의 소중한 소스 코드는 먼저 컴파일(compile) 되어야 합니다. 컴파일 (compile) 우리가 작성한 자바 코드는 .java 확장자로 저장됩니다. 이 자바 파일을 실행(Run)시키면 자바 컴파일러(javac)에 의해 자바 바이트코드로 작성된 .class 파일로..
· JAVA
코드의 배포와 재사용 ❓ 코드의 재사용이란 무엇일까요? 누군가 작성해놓은 소스코드를 복사해서 사용하는 것? 이것은 그냥 사용입니다. 그렇다면 재사용은 무엇일까요? 재사용은 우리가 작성한 코드가 아닌 이미 컴파일 된 바이트코드를 사용하는 것입니다. 그렇다면 내가 생성한 Exam.java 파일을 다른 프로젝트에서 재사용하려면 어떻게 해야할까요? 자바에서 코드를 재사용하려면 내가 생성한 코드를 컴파일 해야합니다. 이 과정에서 Exam.java 파일은 자바 컴파일러에 의해 자바 바이트코드로 변경된 Exam.class 파일로 변경됩니다. 다음으로 컴파일된 바이트코드 파일을 압축 시켜야합니다. Exam.zip 다음으로 확장자를 변경하여 자바를 위한 압축파일 Exam.jar 파일을 생성해야 합니다. 이러한 과정을 배..
· JAVA
나는 “객체지향 프로그래밍이 무엇이냐”고 물어본다면 “객체 간의 협력으로 이루어진 프로그래밍이다” 라고 설명할 것이고, “왜 객체지향 프로그래밍을 해야 하냐?”고 물어본다면 “코드의 재사용성과 유지보수성이 높으니까”, “자바는 객체지향 언어어니까!” 와 같이 교과서적인 답변같은 말을 할 것 같다. 왜냐하면 나도 왜 객체지향이 쓰이는지 잘 모른다,,! 저렇게 배웠으니 저렇게 알고있을 뿐,, 이번 기회에 객체지향에 대해 잘 설명할 수 있도록 학습해보고자 한다. 객체지향 프로그래밍; OOP 프로그램은 절차에 따라 실행된다. 절차에 따라 코드를 작성하게 되면 프로그램의 볼륨이 너무 커지게 된다. 이를 함수로 나누어 구조적인 프로그래밍으로 변경할 수 있을 것이다. 하지만 구조적인 프로그래밍에서도 어떠한 문제가 있..
· JAVA
잘 준비를 마치고 유튜브에서 우연히 자바강의를 찾아서 홀린듯이 보게되었다. 자바를 구조적으로 프로그래밍 하는 방법을 알려주는 강의였다. 그 중 마지막 강의를 보게 되었는데 코드 실행과 함수 호출 스택에 대한 내용을 다루었다. 자바 프로그램이 실행되어 프로세스가 되고, 프로세스의 실행 순서에 따라 코드, 레퍼런스 혹은 일반 변수, 인스턴스가 각각 text, stack, heap 영역에 어떻게 저장되는지 알 수 있었다. 프로그램이 실행되면 작성한 코드들이 바이너리 형식으로 text영역에 로드된다. 이후 main 함수가 호출되기 전에 main함수에 필요한 변수들이 stack 영역에 로딩되고, 인스턴스가 생성되면 동적 메모리 공간인 heap영역에 할당되며 레퍼런스 변수는 heap 메모리 주소값을 가진다. 프로세..
· JAVA
상속은 왜 필요할까? 나는 꽃 장식이 달린 로보트를 만들고 싶다. 하지만 처음부터 꽃 장식이 달린 로봇을 만들기엔 지식도 부족하고 너무 많은 시간이 소요될 것 같은 상황이다. 고민을 하며 걷다가 마침 내가 만들고자 했던 로봇과 외형이 아주 유사한 로봇을 발견하여 구매할 수 있었다. 이제 꽃 장식만 달아주면 완성인 것이다. 이렇게 내가 구현하고자 하는 것과 유사한 클래스를 가져와서 기능을 수정(override)하거나 추가해서 사용하는 것을 상속이라고 한다. 상속이란 상속 (Inheritance)은 새로운 클래스를 정의할 때 이미 구현된 클래스의 속성과 기능을 물려받는 것을 말한다. extends 키워드를 사용하여 상속 관계를 정의할 수 있으며 [상속받는 클래스] extends [상속하는 클래스] 형식으로 ..
· JAVA
스프링부트에서 로그인기능을 만드는 과정에 유저 객체를 생성하고 아무생각 없이 해당 객체를 복사하여 정보를 수정 하였더니 원래의 정보까지 변경되어 버리는 참사가 일어났다.. User user = new User(); User persistenceUser = user; 위의 코드에서 user와 persistenceUser 인스턴스는 같은 주소를 가리킨다. 때문에 둘 중 하나의 참조 변수를 수정하더라도 두 변수 모두 변경이 일어나게 된다. 해당 문제가 발생하는 이유는 user 변수가 참조 타입 변수이기 때문이다. User 의 인스턴스를 생성하고 인스턴스의 주소를 user 변수가 참조하고 있는 것이다. 즉, 값!이 아닌 주소 값!을 가지고 있다는 것. 그렇다면 user의 값을 복사한 persistenceUser..
· JAVA
자바 싱글톤 패턴이란 자바 싱글톤 패턴(Singleton Pattern)은 객체 생성을 단 한 번만 하고, 그 객체를 어디서든지 참조할 수 있도록 하는 디자인 패턴이다. 이는 메모리 낭비를 줄이고 객체의 일관성을 유지하는 데 도움이 된다. 자바에서 싱글톤 패턴은 다음과 같이 구현한다. 생성자를 private으로 선언하여 외부에서 직접 객체를 생성하지 못하도록 한다. 클래스 내부에 자기 자신의 인스턴스를 생성한다. getInstance() 메소드를 통해 생성한 인스턴스를 반환한다. public class Singleton { // 내부에서 자체적으로 인스턴스 생성 private static final Singleton instance = new Singleton(); // 외부에서 인스턴스 생성 불가 pr..
hyunsb
'자바' 태그의 글 목록