의문 최범균의 JSP 2.3 웹 프로그래밍: 기초부터 중급까지 위 책의 세션에 해당하는 내용을 공부하다가 이런 내용이 있었다. 컨텍스트 경로가 다르면 session 객체도 다르다. 그리고 책에 예시처럼 실제 경로를 다르게 하여 비교해보니 세션에 대한 키 값이 저장된 브라우저의 쿠키 값이 달랐다. 구체적으로 왜 이런 현상이 발생하는지 궁금하여 짧지만 글로 작성해보았다. 서블릿 서블릿이란 무엇인가? 초기 웹은 단순히 정적인 웹 페이지를 보여주는 것에 그쳤다. 하지만 기술이 발전하고 사용자들의 요구수준이 높아지면서 동적인 웹 페이지를 제공할 필요성이 대두됐다. JAVA에서 이를 위해 사용하는 것이 바로 서블릿이다. 서블릿은 클라이언트에서 온 HTTP 요청을 적절히 처리해 다시 클라이언트로 반환하는 역할을 수행..
상속과 다형성 인터페이스와 추상클래스에 대해 알아보기 전에 상속과 다형성에 대해 명확히 이해하는 것이 중요하다고 생각했다. 왜냐하면 인터페이스와 추상클래스를 사용하는 목적의 차이가 상속과 다형성의 차이에서 기인한다고 생각했기 때문이다. 상속이란 상속의 장점은 무엇일까? 기존에 작성된 클래스를 재활용할 수 있습니다. 자식 클래스 설계 시 중복되는 멤버를 미리 부모 클래스에 작성해 놓으면, 자식 클래스에서는 해당 멤버를 작성하지 않아도 됩니다. 클래스 간의 계층적 관계를 구성함으로써 다형성의 문법적 토대를 마련합니다. (출처: https://www.tcpschool.com/java/java_inheritance_concept) 여기서 중요한 대목은 3번의 계층적 관계를 구성한다는 의미라 생각한다. 즉 상속은..
equals 메소드는? 동등성을 비교할 때 사용하는 메소드로 자바의 최상위 클래스인 Object 클래스에 정의되어 있다. 동등성이란? 동등성을 이해하기 전에 동일성에 대해 알아보자. 무언가 동일하다는 것은 물리적으로 같은 것임을 의미한다. 예를 들어 서울에 있는 나와 다른 시간 대에 부산에 있는 나는 '동일하다'고 할 수 있다. 그렇다면 동등성은 동일성과 무엇이 다를까? 동등성은 논리적인 같음을 의미한다. 예를 들어 어제와 오늘은 날짜도 다르고 물리적으로 별개이다. 그러나 1년 365일 중 하루라는 논리적 의미로는 어제나 오늘이다 같다. 즉 동등성은 실제 물리적 속성을 비교하면 다르지만 논리적인 개념으로 같은 성질을 가질 때를 의미한다. 프로그래밍적 관점에서는 서로 다른 변수가 같은 메모리 주소를 가지면..
F-lab 멘토링 시간에 String 객체의 equals와 compareTo의 차이에 대해 질문이 있었다. 해당 질문에 잘 답변하지 못해 정확히 이해하고자 코드를 분석하면서 이해해보고자 글을 적는다. equals public boolean equals(Object anObject) { if (this == anObject) { return true; } return (anObject instanceof String aString) && (!COMPACT_STRINGS || this.coder == aString.coder) && StringLatin1.equals(value, aString.value); } 코드는 아주 간단하다. == 비교로 두 객체의 주소 값이 같으면 true를 반환. 주소 값이 같이..
유튜브 채널 쉬운코드의 메모리 관련 영상을 정리해보았다. 영상 링크 runtime이란? 어플리케이션이 메모리에 올라가 실행중인 상태 Stack 메서드의 지역변수, 매개변수가 저장되는 공간. 스택 프레임의 형태로 저장되고 메서드가 호출될 때 생성된다. 생성자가 호출될 때도 스택 메모리에 스택프레임이 쌓인다. 스택메모리에 정해진 용량보다 스택 프레임이 쌓이는 정도가 넘어가면 StackOverflow 에러가 발생한다. 재귀함수에서종종 발생한다. Heap 객체가 저장되는 공간. 어플리케이션이 동작할 때 Stack, Heap에서는 무슨 일이? public class Main { public static void main(String[] args){ Counter c = new Counter(); two(c); i..
선택정렬 O(n2) 가장 기본적인 정렬 방법. 각 요소들을 하나씩 비교해 비교하는 요소와 가장 작은 요소의 자리를 바꾼다. int[] arr = {4, 5, 1, 2, 3}; int minIndex = 0; // 가장 작은 요소의 index. 첫번째 요소의 index로 초기화 for(int i = 0; i arr[j]){ minIndex = j; // minIndex가 가리키는 요소가 비교하는 요소보다 크면 minIndex를 갱신 } } int temp = arr[i]; // 지금 비교하는 요소의 값을 보관 arr[i] = arr[minIndex]; // 가장 작은 ..