[OOP] 캡슐화 Encapsulation
·
Java/OOP
OOP의 큰 특징은 크게 4가지이다.  그중 캡슐화에 대해 자세히 알아보자.  캡슐화 (Encapsulation)   캡슐화는 자바 OOP의 핵심 개념 중 하나이다. 프로그래밍 패러다임중 하나이며  캡슐화는 데이터를 보호하는 원칙이다.  데이터를 외부로부터 숨기고 데이터를 조작하는 기능(메서드)은 무결성을 유지한다.  캡슐화를 통해 데이터를 직접 접근하고 변경을 방지하거나 제한할 수 있다.  캡슐화는 속성과 기능을 하나로 묶고, 외부에서 꼭 필요한 데이터만 노출시키고 나머지는 내부에 감추는 목적이다.  캡슐화의 특징1. 데이터 은닉  클래스 필드(멤버변수)의 접근제어자를 private로 설정하여 외부로부터 접근 못하게 한다. 2. 정보 은폐  클래스 내부의 세부 구현을 알필요가 없어진다. 제공된 메서드만..
[Algorithm] 선형 검색
·
Algorithm&Data Structure
이번글에서는 배열에서 어떤 값을 검색하는 알고리즘 중 선형 검색에 대해 정리해 보겠다. 선형 검색(linear search)은 순차 검색(sequential search)라고도 불린다. 선형 검색 알고리즘은 매우 단순하다.  크기 5인 배열에서 어떤 값을 찾는다고 가정하자.    그림처럼 배열 맨 처음부터 끝까지 순차적으로 배열의 요소와 찾는 값을 비교하면 된다.     즉 선형 검색 알고리즘의 종료 조건은 2가지이다. 1. 검색할 값을 찾는 경우2. 검색할 값을 찾기 못하고 배열의 끝까지 지나는 경우   선형 검색의 단점은 배열의 크기 (데이터 양)가 커지면 반복문도 크기만큼 돌아갈 수 있으니 시간이 오래 걸리는 검색 알고리즘이다. 단순한 만큼 효율성이 안 좋다. import java.util.Scan..
[Java] 얕은 복사와 깊은 복사
·
Java
프로그래밍에서 자료구조는 매우 중요하다. 그중 배열은 자료구조의 기초이자 핵심이라고 볼 수 있다. 배열에 대해 더 상세하고 깊게 배우기 위해 얕은 복사와 깊은 복사에 대해 정리해 보겠다.   우선 코드를 보자.  import java.util.Arrays;public class arrayCopy { public static void main(String[] args) { String[] food = {"치킨", "피자"}; String[] shallowCopy = food; System.out.println("원본 배열: " + Arrays.toString(food)); System.out.println("복사 배열: " + Arrays.toStri..
[Java] 변수(지역, 인스턴스, 클래스)
·
Java/OOP
선언위치에 따른 변수의 종류    인스턴스 변수   각 인스턴스의 개별적인 저장공간 인스턴스마다 다른 값 저장이 가능하다.  인스턴스 생성 후 '참조변수. 인스턴스변수명'으로 접근  인스턴스를 생설할 때 생성되고, 참조 변수가 없을 때 가비지컬렉터에 의해 자동제거됨.  클래스 변수   같은 클래스에서 공유하는 변수이다. 즉, 같은 클래스의 모든 인스턴스들이 공유하는 변수.  인스턴스 생성없이 '클래스이름. 클래스변수명'으로 접근할 수 있다.  클래스가 로딩될 때 생성되고 프로그램 종료될 때 소멸한다. 지역 변수  메서드 내에 선언되며, 메서드의 종료와 함께 소멸한다. 메서드뿐만 아니라 반복문내의 변수들도 지역변수이다.  조건문, 반복문의 블럭{} 내에 선언된 지역변수는 블럭을 벗어나면 소멸한다.    인..
[Java] Method Signature
·
Java
메서드 시그니처는 자바에서 오버로딩된 메서드들을 구분하기 위해 사용되는 것이다. 메서드는 크게 메서드이름, 파라미터(매개변수), 파라미터(매개변수)의 타입으로 구분할 수 있다.  메서드 시그니처의 구성 요소이다.메서드 이름메서드 파라미터리스트메서드 파라미터리스트는 파라미터들의 타입, 개수, 순서에 대한 정보이다.  static int add(int a, int b){ return a+b;}static int add(int a, int b, int c){ return a+b+c;}  같은 이름의 add메서드이지만 메서드 시그니처가 다른 메서드이다.그로 인해 오버로딩이 가능해진 것이다. 만약 오버로딩이 없었다면 메서드의 이름을 조금만 다르게 해 구현했을 것이다.     오버로딩은 반환 타입은 인..
[Java] Stack Trace
·
Java
Java에서 스택 트레이스(Stack Trace)는 프로그램 실행 중 예외(Exception)가 발생했을 때, 해당 예외가 발생한 위치와 호출된 메서드의 순서를 보여주는 디버깅 정보이다. 스택 트레이스는 예외가 발생한 이유를 파악하고 해결하는 데 도움이 되는 도구이다.   public class StackTracePractice { public static void main(String[] args) { Generation g = new Generation(); try { g.checkStringLength(); } catch (NullPointerException npe) { npe.printStackTrace(); ..
[Java] Argument로 참조값을 보내면?
·
Java/OOP
**대원칙: 자바는 항상 변수의 값을 복사해서 대입한다.  (김영한 강의 중) 저 대원칙을 꼭 기억하고 계속 생각하자.    public class MethodChange { public static void main(String[] args) { DataA dataA = new DataA(); dataA.value = 10; System.out.println("메서드 호출 전 dataA의 값 = "+dataA.value); changeValueMethod(dataA); System.out.println("메서드 호출 후 dataA의 값 = "+dataA.value); } static void changeValueMethod(..