본문 바로가기

분류 전체보기

String 다음과 같은 사진에서, s1과 s2가 같은 경우 출력 되는 문장은 무엇일까? 당연히 두 문장 모두 true를 반환한다. 그러나 s1과 s2는 분명 다른 변수이다. 왜 저러한 결과가 나오는 것일까 출력문에 들어가는 문장은 주소를 비교하는 문장이다. 그러므로 저 결과값을 통해 알 수 있는 사실은 주소값이 같다는 의미가 되는 것인데, 기존 우리가 알고 있는 상식과는 매우 다른 이야기이다. 왜 그러한 것일까 자바에서는 어떠한 변수를 생성하면 new라는 명령어를 사용해야 한다. new라는 명령어를 사용함으로 인해 메모리에 있는 힙에 공간을 할당하여 정보를 저장하게 되는데, 해당 코드에서는 new를 사용하지 않았다. 그 말은 힙에 공간을 할당하지 않는다는 것이다. 그렇다면 해당 변수는 어디에 저장되는가? 문자열이 .. 더보기
equals, hashcode equals() 와 hashcode()equals 는 두 객체의 내용이 같은지, 동등성(equality) 를 비교하는 연산자hashCode 는 두 객체가 같은 객체인지, 동일성(identity) 를 비교하는 연산자 다음과 같은 클래스가 있을때 equals() 를 이용한 두 객체의 동등성 비교는 올바른 결과가 나오지 않는다. public class Person { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { thi.. 더보기
Singletone pattern / Synchro * Singleton Pattern (싱글턴 패턴) - 싱글턴 패턴은 해당 클래스의 인스턴스가 하나만 만들어진다. - 어디서든지 그 인스턴스에 접근할 수 있도록 한다. - 클래스에서 자신의 단 하나 뿐인 인스턴스를 관리하도록 만들면 된다. 싱글턴 패턴은 인스턴스가 하나 뿐인 특별한 객체를 만들 수 있게 해주는 패턴이다. 주로 쓰이는 용도는 아래와 같다. - 스레드 풀, 캐시, 대화상자, 사용자 설정, 디바이스 드라이버 등등 객체가 전체 프로그램에서 오직 하나만 생성되어야 하는 경우 그럼 전역 변수로 static 으로 선언해서 사용하면 되지 않을까? 만약 전역 변수로 객체를 생성하면 어플리케이션이 실행 될 때 객체가 생성 될 것이다. 그러나 그 객체가 자원을 많이 차지 한다면 사용도 되기 전에, 괜히 자원.. 더보기
override & overload [오버라이딩 & 오버로딩] 1. 다형성 자바에서는 다형성을 지원하기 위한 기능으로 override & overload 기능이 있다.overload - 같은 이름의 메소드를 여러개 가지면서 매개변수의 유형과 개수가 다르면 다른 메소드로 인식하여 자바 내부에서 판단해주는 기술.override - 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의해서 사용하도록 해주는 기술. override , 재정의라고 한다. 이름이 비슷해 헷갈리기 쉬운 개념인데 확실히 알고 가야 객체지향 기반의 자바에서 중요한 3 요소를 이해할 수 있으니 잘 알아둬야 한다. 1-1. overload오버로딩(overloading)은 메소드 오버로딩과 생성자 오버로딩이 있다. 그러나 결국 같은 개념으로서 같은 이름의 함수를 여러개 정의하고 매개변수의 유형과 갯수.. 더보기
상속 - 2 1. 상속과 생성자 부모 클래스의 생성자가 없을 시에, 자식 클래스에게 부모 클래스를 상속시키려고 하면 에러메세지가 뜬다.이를 이용하여 상속에는 생성자가 관련되어 있음을 알 수 있다. 에러메세지를 읽어보면 부모클래스에 기본 생성자가 정의되지 않았다는 내용의 에러 메세지를 뿜는다. 강제로 A클래스를 호출해보면 A의 기본 생성자가 없다는 메세지가 뜬다. 그 이유는 부모클래스와 자식클래스의 상속 관계에서 부모클래스의 생성자를 먼저 실행하기 때문이다. 생성자를 이용해 부모클래스를 호출해 정보를 사용하는 시스템이라는걸 알 수 있는 부분이다. 결국 계속해서 자식은 부모를 호출하며, 부모클래스는 자신의 부모클래스를, 또 그 위 클래스를 연속해서 호출하게 되는데 이것을 연쇄 호출이라 한다. 그렇다면 맨위 클래스, 그러.. 더보기
상속 1. 개념 자바에는 상속이라는 개념이 있다.A extends B 라고 표현하며, A가 B를 상속한다. 라는 의미이다. 일상생활의 상속과 비슷한 의미로 이해하면 편하며, 그렇기 때문에 B에서 생성된 변수나 메소드를 똑같이 사용 가능하나 역으로 A에서만 생성된 변수 & 메소드를 B에서 사용하는 것은 불가능하다. extend의 영사전적 의미는 확대하다. 넓히다. 의 의미로서. 이 의미를 생각하고 공부하면 이해하기가 쉽다.A를 자식 클래스, B를 부모 클래스라고 할 때, 부모가 가지고 있는걸 자식이 사용하면서 자식이 개인적인 물품을 사용하는 방식이라 이해하면 된다. B에서 쓰는 변수와 메소드는 A에서 상속받아 사용이 가능하며, 또한 A에서 추가로 변수와 메소드의 생성이 가능하다. 위 사진에서 Employee 클.. 더보기
JAVA Static 변수 생성 주기 static[정적]과 동적 생성으로 나뉘어짐.변수 & 메소드를 동적 & 정적으로 생성 가능. 해당 사진에서 static 변수는 메모리가 고정되어 변하지 않게 되기 때문에 고정된 변수로 사용하고 싶을 때 사용 [변수 공유의 개념이나. 부동의 개념에서 주로 사용됨.]우선순위는 static 초기화 블럭 > 클래스 생성자 > 인스턴스 변수 초기화. 의 순으로 이루어짐. static과 일반 인스턴스 변수의 생성간 생성 주기를 제대로 아는 것이 중요한데, Static 선언이 된 변수는 main클래스나 기타 다른 해당 변수의 선언보다 우선시 되기 때문에 그 생성 위치를 잘 파악해야함. 더보기
JAVA Static 변수 static 변수예를 들어 다음과 같은 클래스가 있다고 하자.public class HousePark { String lastname = "박"; public static void main(String[] args) { HousePark pey = new HousePark(); HousePark pes = new HousePark(); } } 박씨 집안을 나타내는 HousePark이라는 클래스이다. 위와 같은 클래스를 만들고 객체를 생성하면 객체마다 lastname을 저장하기 위한 메모리를 별도로 할당해야 한다. 하지만 가만히 생각해 보면 HousePark 클래스의 lastname은 어떤 객체이던지 동일한 값인 "박"이어야 할 것 같지 않은가? 이렇게 항상 값이 변하지 않는 경우라면 static 사용 시.. 더보기
JAVA Gabage Collecter [JVM GC] GC에 대해서 알아보기 전에 알아야 할 용어가 있다. 바로 'stop-the-world'이다. stop-the-world란, GC을 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것이다. stop-the-world가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춘다. GC 작업을 완료한 이후에야 중단했던 작업을 다시 시작한다. 어떤 GC 알고리즘을 사용하더라도 stop-the-world는 발생한다. 대개의 경우 GC 튜닝이란 이 stop-the-world 시간을 줄이는 것이다. Java에서는 개발자가 프로그램 코드로 메모리를 명시적으로 해제하지 않기 때문에 가비지 컬렉터(Garbage Collector)가 더 이상 필요 없는 (쓰레기) 객체를 찾아 지우는 작업을 한다. 이 .. 더보기
JAVA 객체지향 설명 더보기

반응형