본문 바로가기

Develop/Java

(8)
중첩 클래스 중첩 클래스?내부 클래스를 포함한 모든 중첩 클래스는 특정 클래스가 다른 하나의 클래스 안에서만 사용되거나아주 긴밀하게 연결되어 있는 특별한 경우에만 사용왜 사용?1) 논리적 그룹화특정 클래스가 다른 하나의 클래스 안에서만 사용되는 경우중첩 클래스가 외부에 노출되지 않는 장점2) 캡슐화중첩 클래스는 바깥 클래스의 private 멤버에 접근할 수 있음 1. 정적 중첩 클래스 * 중첩(Nested) : 어떤 다른 것이 내부에 위치하거나 포함되는 구조적인 관계 static O바깥 클래스의 인스턴스에 소속이 X바깥 클래스의 클래스 멤버에는 접근 가능 (private도 가능) 자신의 멤버에는 당연히 접근 가능 *private 접근 제어private 접근 제어자는 같은 클래스 안에 있을 때만 접근할 수 있음중첩 클..
AppConfig의 필요성 일반적으로 프로젝트의 일부 정책이 변경되어 있을 때, 다형성 덕분에 추가 개발 자체에는 무리가 X하지만 그 후에 새로운 정책을 적용하려고 보니 "클라이언트 코드"인 서비스의 구현체도 함께 변경해야하는 문제 발생DIP 위반! "관심사의 분리"기존에는 클라이언트가 의존하는 서버 구현 객체를 직접 생성하고 실행마치 모든 것을 총괄하는 AppConfig가 필요해짐AppConfig는 애플리케이션의 전체 동작 방식을 구성(config)하기 위해, "구현 객체를 생성"하고 "연결"클라이언트  객체는 자신의 역하을 실행하는 것에만 집중, 권한 자체는 줄어든다 "AppConfig" 리팩터링구성 정보에서 역할과 구현을 명확하게 분리역할이 잘 들어남중복 제거AppConfig의 등장으로 애플리케이션이 크게 "사용 영역"과 객..
StringBuilder / StringBuffer / String 비교 🔴 StringBuilder:변경 가능한 문자열을 다루는 클래스문자열 조작 작업(추가, 삽입, 삭제 등)을 효율적으로 수행단일 스레드 환경에서 사용하기 적합주요 메서드: append(), insert(), delete(), reverse() 등🟢 StringBuffer:StringBuilder와 유사하지만 동기화(synchronized)되어 있어 멀티스레드 환경에서 안전StringBuilder보다 약간 느리지만 스레드 안전성이 필요한 경우에 사용주요 메서드는 StringBuilder와 동일🟡 String:불변(immutable) 문자열을 나타내는 클래스한 번 생성되면 내용을 변경할 수 X문자열 연산 시 새로운 String 객체가 생성되므로, 많은 문자열 조작이 필요한 경우 비효율적일 수 있음🟣비교..
\n이 남아 있는 경우 System.out.print("이름을 입력하세요:"); String name = sc.nextLine(); System.out.println("입력 받은 이름:"+name); System.out.print("나이를 입력하세요:"); int age = sc.nextInt(); System.out.println("입력 받은 나이:"+age); System.out.print("키를 입력하세요:"); double height = sc.nextDouble(); System.out.println("입력 받은 키:"+height); System.out.print("여성입니까?(true|false):"); boolean isWoman = sc.nextBoolean(); sc.nextLine(); System.out...
public void / int public class MaxCounter { private int count = 0; private int max; public MaxCounter(int max) { this.max = max; } public void increment() { //검증 로직 if (count >= max) { System.out.println("최대값을 초과할 수 없습니다."); return; } //실행 로직 count++; } public int getCount(){ return count; } } 그동안 public void/int 이 부분이 엄청 헷갈렸었는데, 이제 확실하게 이해를 했다. 'void'라는 것은 없다는 뜻 > 한 마디로 반환하는 값이 없다는 것이다. 위에 식을 보면 count++만 있을 뿐 co..
클래스와 데이터 (+ 배열,매서드) -클래스 : 설계도 -객체 / 인스터스 : 설계도인 클래스를 사용해서 실제 메모리에 만들어진 실체 인스턴스가 좀 더 클래스 관계지향적 단어 변수 선언 > 객체 생성 > 참조값 보관 > 객체 사용 public class ProductOrdermain { public static void main(String[] args) { ProductOrder [] orders = new ProductOrder[3]; //배열 부분에서 코드 짜는 방법 이해하기 ProductOrder order1 = new ProductOrder(); //변수 선언 & 객체 생성 & 참조값 보관 order1.productName="두부"; // dot을 사용해서 객체에 접근 order1.price=2000; order1.quantity..
배열 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("학생수를 입력하세요:"); int studentCount = scanner.nextInt(); int[][] scores = new int[studentCount][3]; String[] subjects = {"국어", "영어", "수학"}; for (int i = 0; i < studentCount; i++) { System.out.println((i+1) + "번 학생의 성적을 입력하세요:"); for (int j = 0; j < 3; j++) { System.out.print(subjects[j] + " 점수:"); sc..
switch문 "백문이 불여일타, 절대 클론코딩하지 않고 먼저 코드 짜보고 그 다음에 강의 들을 것" ▶ switch문 -> case를 만들어서 관리하면 편한데 자꾸 if문 만들어서 하고 있음. // 효율성을 최대한으로 올리는 것을 잊지말자. 이런 식으로 case마다 넣으면 if / if-else / else문으로 복잡하게 구성할 필요가 없다. 다만, 단순히 값이 같은지만 비교할 수 있음. -break: 현재 실행중인 코드를 끝냄. -return: 1) 클래스내의 어떠한 메소드가 실행되고 해당 메소드 실행에 따라 나온 값을 호출한 곳에서 돌려받고자 할 때 2) 해당 메소드 실행 중 특정 조건에 따라 해당 메소드의 진행을 멈추고 빠져나올 때. -default = if-else와 같음.