no image
[Java] 제네릭 (Generic) - 2
저번 포스팅에서, 제네릭을 도입하여 코드의 타입 안전성과, 코드 재사용성을 늘려보았다.오늘은 1편에 이어 제네릭에 대해 두번째 포스팅을 해보고자 한다.동물 병원을 만들어보자예를 들어, 아래와 같이 Animal 클래스와 그의 자식 클래스인 Dog와 Cat이 있다고 하자.public class Animal { private String name; private int size; public Animal(String name, int size) { this.name = name; this.size = size; } public String getName() { return name; } public int getSize() { ..
2024.10.10
no image
[Java] 제네릭이 필요한 이유 (Generic) - 1
오늘도 즐겁고 기쁜 마음으로 제네릭에 대해 포스팅 하고자 한다. 내용이 많으니까 2부에 걸쳐 올리려고 한다. 제네릭이 필요한 이유매그네릭.. 아니 제네릭이 필요한 이유를 설명하기 전, 예시를 통해 이해해보자예를들어, 아래와 같이 단순한 기능을 제공하는 코드가 두개 있다고 가정하겠다그리고 아래와 같이 Main 코드를 작성해보겠다public class BoxMain { public static void main(String[] args) { IntegerBox integerBox = new IntegerBox(); integerBox.set(10); // == (Integer integerBox = Integer.valueOf(10)); -> 오토 박싱 Intege..
2024.10.07
no image
[Java] 불변 객체 (Immutable Instance) , 사이드 이펙트(Side Effect)
불변 객체란 무엇인가오늘 포스팅 할 것은 불변 객체이다.불변객체.. 이름부터 "변하지 않는 객체" 인 것 같지 않은가.. 얼마나 직관적인지..! 그전에 불변객체가 왜 필요한지를 알기 위해 빌드업부터 시작해보겠다.아무튼 우리가 자바에서 사용하는 데이터 타입에는 크게 두가지가 있다 바로 기본형과 참조형 이다.간단하게 예를 들면, 아래와 같다.int number = 10; // 기본형Object obj = new Object(); // 참조형기본형은 그냥 직관적으로 봐도 잘 알테고, 참조형은.. 확실하게 알지 못한다면 더 공부를 하고 와야한다..그냥 일단 참조형 -> 객체의 주소 값 저장 정도로만 알고 일단 킵고잉하자.먼저 기본형에 대해 예를 들어보면, 간단하게 a 에 10을 대입하고, b 에는 a의 값을 대..
2024.09.29
no image
[Java] StringBuilder - 가변 String
String은 원래 불변이다원래 String은 불변 객체이다. → 즉 내부 값은 변경 불가그러므로, 객체의 값을 바꾸고 싶다면 기존의 값은 그대로 두고 기존 값 + 더할 값 을 통하여 새로운 객체를 생성해서 사용해야한다. 변경된 값을 기반으로 새로운 객체 생성시 단점예를 들어, A,B,C,D 를 더하여 ABCD 라는 필드 값을 만들고 싶은데, 이때,A + B 를 통해 AB 라는 새로운 객체가 만들어지고, AB+C라는 두번째 새로운 객체가 만들어지고,ABC+D 라는 세번째 새로운 객체가 만들어진다.이때 생성되는 새로운 객체들은 ABCD를 만들기 위한 발판일 뿐, 사용하거나 필요한 객체가 아니다.(메모리 낭비 → 즉 GC대상) 어떻게 해결할 수 있을까?String은 불변객체이다. 그러므로 계속 필요 없는 객..
2024.09.26
no image
[Java] String 클래스에서 사용되는 메서드 (주관적으로 중요한 메서드)
문자열 정보 조회length() : 문자열의 길이를 반환한다.isEmpty() : 문자열이 비어 있는지 확인한다. (길이가 0)isBlank() : 문자열이 비어 있는지 확인한다. (길이가 0이거나 공백(Whitespace)만 있는 경우), 자바 11charAt(int index) : 지정된 인덱스에 있는 문자를 반환한다.문자열 비교equals(Object anObject) : 두 문자열이 동일한지 비교한다.equalsIgnoreCase(String anotherString) : 두 문자열을 대소문자 구분 없이 비교한다.compareTo(String anotherString) : 두 문자열을 사전 순으로 비교한다.compareToIgnoreCase(String str) : 두 문자열을 대소문자 구분 없이..
2024.09.25
no image
[Java] 다운 캐스팅 , instanceof
다형성을 공부하면서 여러 가지 클래스를 상속하다보면, 슈퍼 클래스인 A 클래스를 참조하는 자식 클래스들의 인스턴스가 어떤 클래스를 참조하고 있는지 확인하고 싶다면, instanceof 키워드를 사용하면 된다.쉽게 얘기해서..//Parent 를 부모클래스, Child를 자식 클래스라고 가정Parent parent1 = new Parent();Parent parent2 = new Child();이때, Parent 는 자기 자신을 참조할 수 있을 뿐만 아니라, 자식 타입의 Child 인스턴스도 참조할 수 있다.이럴 때, parent1 과 parent2가 참조하는 인스턴스의 타입을 확인하고 싶다면, instanceof 키워드를 사용하면 된다. 구체적으로 아래와 같은 코드를 실행한다고 가정하자.public cla..
2024.09.21
no image
[Java] 절차 지향 프로그래밍(PP) VS 객체 지향 프로그래밍(OOP)
절차 지향 프로그래밍 (Procedural Programming) VS 객체 지향 프로그래밍(Object Oriented Programming) 에 대해 포스팅 해보겠다사실 지난번에 객체 지향의 특성에 대해 올렸는데, 이번에는 이 둘의 차이점을 코드를 통해 쉽게 포스팅 해보고자 한다.사실 현대 트렌드는 거의 대부분 객체 지향 프로그래밍을 추구하는 추세이지만, 몇몇은 사실 두개의 개념을 아예 갈라치기 해놓고 생각하는 사람이 꽤 있는 것 같다.결론부터 말하자면, 이 두가지는 정반대로 대치되는 개념이 아니다아무리 객체 지향을 추구한다고 하더라도, 프로그램의 작동 순서는 반드시 중요한 개념이기 때문이다.간단하게 예를 들어, 우리가 ATM이라는 객체를 만들어 사용하기로 하고, 사용자의 입력을 기다리고 있는 상태다..
2024.09.08
no image
[Java] 향상된 for문 (for - each문)
향상된 for 문 (for - each)문이란배열을 배우고 응용하다 보면 배열의 0번째 인덱스부터 끝까지 한번 돌리고 싶은데,우리가 그럴 때마다 어떻게 했는가? 일단 아래 예시를 보자.//기존 for 문 사용public class BaboFor { public static void main(String[] args) { int[] numbers = {1,2,3,4,5}; // 배열 초기화 for(int i = 0 ; i 단순히 배열을 순회하고 싶은데, 위 코드는 쓸데없이 귀찮은 작업들을 몇 가지 해줘야 한다.인덱스 변수 i 선언 → 메모리 낭비i i++을 통해 인덱스를 하나씩 증가 해줘야한다 이러한 귀찮은 작업들을 생략할 수 있는 아주 좋은 기능이 있는데, 이것이 바로 향상..
2024.09.02
no image
[Java] Java에서의 스코프(Scope)
배그 하시는 분들 검색 키워드에 이끌려 오셨다면 죄송합니다ㅋㅋJava에서 스코프(Scope) 란 무엇인가?스코프(Scope)란 변수가 접근 가능한 범위를 의미한다.자세한건 아래 코드의 예제를 통해 설명하겠다.package scope;public class Scope1 { public static void main(String[] args) { int m = 10; //m 생존시작 if (true){ int x = 20; //x 생존시작 System.out.println(x); System.out.println(m); } // x 생존 종료 System.out.println(x); // 이건..
2024.08.31