[JAVA] 데이터 추상화 vs 제어 추상화
·
Java
“추상화”라는 단어는 어렵게 들리지만, 사실 우리가 매일 쓰는 객체지향의 핵심 개념 중 하나입니다.자바에서 추상화는 복잡한 세부사항을 숨기고 필요한 정보만 노출하는 것을 의미합니다.이번 글에서는 데이터 추상화와 제어 추상화의 차이, 그리고 자바에서 이들이 어떻게 구현되는지를 살펴보겠습니다. 추상화란 무엇인가?복잡한 현실 세계를 단순화해서 모델링하는 과정“무엇을 한다”와 “어떻게 한다”를 분리하는 것자바에서는 클래스, 인터페이스, 접근제어자를 통해 표현됨abstract class Animal { abstract void makeSound();}데이터 추상화 (Data Abstraction)데이터의 내부 구조를 숨기고, 필요한 정보만 외부에 노출하는 방식주로 캡슐화(encapsulation) 와 함께 ..
[Java] 객체지향개념I
·
Java
1. 객체지향언어코드의 재사용성이 높다.코드의 관리가 용이하다.신뢰성이 높은 프로그래밍을 가능하게 한다.객체지향은 현실 세계를 객체 단위로 모델링하여 소프트웨어를 설계하는 방식 객체는 데이터(필드)와 동작(메서드)을 함께 포함하며, 주요 목적은 재사용성, 유지보수성, 확장성 향상이다.2. 객체지향 프로그래밍(OOP)의 4가지 특징추상화공통된 속성과 기능을 추출하여 모델링 (예: 동물 → 소리내다())캡슐화데이터와 메서드를 하나로 묶고 외부에서 접근 제한 (private, getter/setter)상속기존 클래스의 속성과 기능을 재사용 (코드 중복 최소화)다형성같은 인터페이스로 다른 구현을 실행 (오버라이딩, 오버로딩)3. 객체지향 설계 원칙(SOLID) 5가지S: 단일 책임 원칙 (SRP)클래스는 하나의..
[Java] 클래스 메소드(static 메소드) vs 인스턴스 메소드
·
Java
static 메소드란?메소드 앞에 static가 붙은 메소드이다.객체 생성 없이 호출이 가능한 메소드static 메소드와 인스턴스 메소드의 차이는 인스턴스 변수 사용 유무로 나뉜다. 인스턴스 메소드인스턴스 생성 후, '참조 변수.메소드 명()'으로 호출한다.인스턴스 멤버와 관련된 작업을 한다.메소드 내에서 인스턴스 변수를 사용할 수 있다.인스턴스 변수를 이용해서 작업을 하므로 변수의 묶음인 객체를 생성해야 인스턴스 메소드를 호출할 수 있다. ex) Exam ex = new Exam(); ex.example = "예시"; static 메소드(클래스 메소드)객체 생성 없이 '클래스 명.메소드 명()'으로 호출이 가능하다.인스턴스 멤버와 관련되지 않은 작업을 한다.메소드 내에서 인스턴스 변수를 사용할 수 없..
[Java] 기본형 매개변수와 참조형 매개변수
·
Java
기본형 매개변수변수의 값을 읽기만 가능 (read only)참조형 매개변수변수의 값을 읽고 변경 가능 (read & write)기본형 매개변수 class Data { int x; } class Ex { public static void main(String[] args) { Data d = new Data(); d.x = 10; System.out.println("main() : x = " + d.x); change(d.x); System.out.println("After change(d.x)"); System.out.println("main() ..
[백준] 1929번 소수구하기
·
Algorithm/백준
소수구하기 문제다. 이 문제는 에라토스테네스의 체를 사용해야 하는 문제다. 우선 isNotPrime이라는 배열을 선언해준다. 이때 이 배열은 boolean타입이다.boolean 타입은 기본적으로 false로 초기화 되어있다. isNotPrime[0] = isNotPrime[1] = true; for(int i = 2; i * i 이 코드가 핵심이다. 0, 1은 소수가 아니다.그렇기 때문에 배열은 true가 된다. 2부터 for문을 돌렸을 때 i값의 제곱수에 준하거나 그보다 작은 수까지 판별하게 되는데이게 에라토스테네스의 체이다.// 2부터 n의 제곱근까지의 모든 수를 확인 그리고 그 이하의 수는 모두 판별했기 때문에 i * i 부터 보게 된다.1) 자기 자신은 소수2) 자기의 배수는 모두 소수가..
[백준] 2609번 최대공약수와 최소공배수
·
Algorithm/백준
유클리드 호제법을 안다면, 쉽게 풀 수 있다!GCD 최대공약수를 구하는 것이고LCM 최소공배수를 구하는 것이다. GCD는 2개의 방법이 있다.// while문을 사용하는 방법static int getGCD(int x, int y) { while(y != 0) { int temp = x % y; x = y; y = temp; } return x;}이 방버은 y가 0이 아니면 계속해서 반복하게 된다.y로 x를 나눈 나머지가 temp에 저장되고y는 x로 치환된다.그리고 나머지 값은 y로 치환된다. 즉, 나머지가 되는 수로 계속 나누는 것이다.// 재귀를 통해 푸는 방법public static int getGCD(int num1, int num2) { ..
[백준] 11660번 구간 합 구하기 5
·
Algorithm/백준
이거.... 이거 어떻게 풀지...?문제를 처음 본 순간 뇌정지가 왔다... 자자 정신차리고이 문제는 2차원 배열의 구간 합을 구하는 문제다. 원본 배열 arr과 합친 누적합 배열sum이 있다고 생각하고 진행하겠다. 처음에 입력받는 값이 N 그리고 M이다.N * N 짜리의 테이블을 생성한다고 생각하자음! 그러면 이중 for문을 사용하는데 다 N까지라고 생각하면 되겠구나!1. 값을 입력받는다.2. 원본 배열 안에 값을 넣는다. (이중 for문)3. 누적합 배열을 구한다.4. 구간합을 구한다. 누적합 배열을 구하는 방법은!sum[i][j] = sum[i][j - 1] - sum[i - 1][j] - sum[i - 1][j - 1] + arr[i][j] 구간합 배열을 구하는 방법은!int result = su..
[백준] 4344번 평균은 넘겠지
·
Algorithm/백준
문제를 꼼꼼히 읽어보고 사고의 흐름을 정리해보겠다.1. 2차원 배열로 풀어야하나?2. Scanner로 받아야하나 BufferedReader를 사용할까 고민이 됐다. 우선 Scanner로 받게 된다면 공백을 기준으로 데이터를 읽는 데 편리하여 코드가 직관적이고 이해하기 쉬우나 조금 느리다.그래서 기왕 하는거 BufferedReader로 받고 split함수로 나눠야겠다! 싶었다. Tokenizer를 사용해서 nextToken을 했는데 잘 안 돼서 spilit을 쓰게 됐다..ㅎ 이때, 새롭게 알게된 점이렇게 한 줄로 바꿀 수 있다! String s = br.readLine(); String[] arr = s.split(" "); ..
[코드업 기초 100제] Java 1056 ~1060 풀이
·
Algorithm/코드업
1056 : [기초-논리연산] 참/거짓이 서로 다를 때에만 참 출력하기import java.util.*;public class Main{ public static void main(String arg[]) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); System.out.println(a ^ b); }}1057 : [기초-논리연산] 참/거짓이 서로 같을 때에만 참 출력하기import java.util.*;public class Main { public static void main(String arg[]) { Scanner sc = n..
[코드업 기초 100제] Java 1051 ~1055 풀이
·
Algorithm/코드업
1051 : [기초-비교연산] 두 정수 입력받아 비교하기3import java.util.*;public class Main { public static void main(String arg[]) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); System.out.println(b >= a ? 1 : 0); }}1052 : [기초-비교연산] 두 정수 입력받아 비교하기4import java.util.*;public class Main { public static void main(String arg[]) { Scanner sc = new S..